策略模式指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。
以下是书中的一个应用场景。 Joe上班的公司做了一款模拟鸭子的游戏,游戏中出现各种鸭子,一边游泳一边呱呱叫。系统原来按照OO标准用了一个超类Duck,让各种鸭子继承此超类。 差不多像这样
很快问题来了,主管在给股东们演示的时候,出现了很多橡皮鸭子在屏幕上飞来飞去。。。 这次Joe学会了举一反二,子类覆写超类的方法?不行,如果加入诱饵鸭,既不会飞也不会叫~ 嗯,可以利用接口,将功能标识为接口,需要的类自己实现接口方法。
又被主管发现问题了:当飞行的动作变化,所有的子类都要修改。。。 该策略模式出场了;
既然变化的是鸭子的行为,那就把行为和鸭子本身分离出来。
思路明确了,实现起来就顺利多了
public interface FlyBehavior {
public void fly();
}
public interface QuackBehavior {
public void quack();
}
public class FlyWithSwing implements FlyBehavior {
public void fly() {
System.out.println("fly with swing");
}
}
public class Squack implements QuackBehavior {
public void quack() {
System.out.println("squack");
}
}
public class MallardDuck extends Duck {
@Override
public void diaplay() {
System.out.println("I am MallardDuck ");
}
}
/**
* @author Admin
* @create date 2013-8-20
*/
public abstract class Duck {
private FlyBehavior flyBehavior;
private QuackBehavior quackBehavior;
public void fly() {
flyBehavior.fly();
}
public void quack() {
quackBehavior.quack();
}
public abstract void diaplay();
public static void main(String[] args) {
Duck mallardDuck = new MallardDuck();
FlyBehavior flyWithSwing = new FlyWithSwing();
QuackBehavior quack = new Squack();
mallardDuck.setFlyBehavior(flyWithSwing);
mallardDuck.setQuackBehavior(quack);
Duck rubberDuck = new RubberDuck();
FlyBehavior flyNoWay = new FlyNoWay();
QuackBehavior muteQuack = new MuteQuack();
rubberDuck.setFlyBehavior(flyNoWay);
rubberDuck.setQuackBehavior(muteQuack);
mallardDuck.diaplay();
mallardDuck.quack();
mallardDuck.fly();
}
/**
* @param flyBehavior
* the flyBehavior to set
*/
public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
......
}
- 大小: 39.3 KB
- 大小: 41.8 KB
- 大小: 41.7 KB
- 大小: 114.8 KB
分享到:
相关推荐
深入浅出设计模式 (Head First Design Pattern)_带书签 深入浅出设计模式 (Head First Design Pattern)_带书签
《Head First Design Patterns》是一本深受开发者喜爱的设计模式书籍,由Eric Freeman和Elisabeth Robson合著。这本书以其独特的教学方式,通过丰富的图像、幽默的插图以及易于理解的实例,深入浅出地介绍了设计模式...
headfirst design pattern C++ code
又名: Head First Design Patterns 作者: (美)弗里曼(Freeman,E.) 副标题: Head First Design Patterns 简介 ······ 你不想重新发明车轮(或者更差的是,没有充气车胎的轮子),所以你从设计模式中寻求...
比现在csdn上的headfirst design pattern要清晰得多
Head First Design Patterns 中文版 带目录 设计模式经典书籍
著名的《Head First Design Pattern》学习笔记,摘要这本书中的设计思路。由于书本过长,整理出笔记帮助回想起设计模式。文件是docx格式,只能由OFFICE Word 2007之后的版本打开,内附Visio类图文件。本文由个人整理...
Head First design pattern(中文版).part4.rar
Head First design pattern(中文版).part7.rar
如果你曾经读过任何一本深入浅出(Head First)系列书籍, 你就会知道能够从本书中得到的是:透过丰富的视觉效果让你的大脑充分地运作。本书的编写运用许多最新的研究,包括神经生物学、认知科学以及学习理论, 这...
Head First Design Patterns(中文版)设计模式 java。 Head First Design Patterns(中文版) 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除 设计模式 ...
Head First design pattern(中文版).part6.rar
深入浅出设计模式(Head First Design Patterns)完整版,由本人精心整理网上的JPG版制作成PDF版供各位编程爱好者下载学习,这部模式教程诙谐幽默,寓教于乐,实乃菜鸟成才必备之选。共分为9个压缩包,绝对的物有所值...
深入浅出设计模式(Head First Design Patterns)完整版,由本人精心整理网上的JPG版制作成PDF版供各位编程爱好者下载学习, 这部模式教程诙谐幽默,寓教于乐,实乃菜鸟成才必备之选。共分为11个压缩包,绝对的物有所...
以上仅是"Head First DesignPattern_src"源码中的一部分设计模式,每种模式都提供了具体的实现,便于学习和理解。通过深入研究这些代码,开发者可以提升软件设计能力,编写出更高效、更易于维护的代码。
《Head First Design Patterns》是一本深入浅出介绍设计模式的图书,由Eric Freeman、Elisabeth Freeman、Bert Bates和Kathy Sierra联合编写。本书结合认知科学原理和神经生物学研究,采用引导式教学方法,通过故事...
head first design pattern(chinese version) 1 what is the design pattern 2 why to use 3 how to use 4 questions when use,and how to resolve 5 funny when reading
《HeadFirst Design Patterns》是设计模式领域中一本非常受欢迎的入门书籍,以其独特的教学方式深受读者喜爱。设计模式是软件工程中的一种最佳实践,它总结了在特定上下文中解决常见问题的经验和方法,使得开发者...