首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

设计形式之一策略模式

2012-09-09 
设计模式之一策略模式图一:?图二:??? 鸭子对象,会游泳、会叫、会飞(变天鹅之后),但不是所有的鸭子都能飞(当

设计模式之一策略模式

图一:
设计形式之一策略模式
?图二:

设计形式之一策略模式
?
?? 鸭子对象,会游泳、会叫、会飞(变天鹅之后),但不是所有的鸭子都能飞(当它还是丑小鸭的时候),初步设计如图一。

?

? 这并不是一个复用性好的设计,有更好的解决方案(图二)。

?

? 原则是:

?

? 1.找出应用中可能需要变化的地方,把它们独立出来,不要和那些不需要变化的代码混在一起;

?

??2.针对接口编程;

?

? 3.多用组合少用继承;

?

? 图二就是最简单的策略模式(Strategy Pattern):

?

? 定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

?

/** * 抽象鸭子父类 * @author Administrator * */public abstract class Duck {FlyBehavior flyBehavior;QuackBehavior quackBehavior;public Duck(){}public abstract void display();public void perfectFly(){flyBehavior.fly();}public void perfectQuack(){quackBehavior.quack();}public void swim(){System.out.println("swimming!! now!!!");}public void setFlyBehavior(FlyBehavior fly){this.flyBehavior = fly;}public void setQuackBehavior(QuackBehavior quack){this.quackBehavior = quack;}}
/** * 飞行行为接口 * @author wengn * */public interface FlyBehavior {//飞行方法public void fly();}
/** * 飞行行为的具体实现 * @author wengn * */public class FlyWithWings implements FlyBehavior {public void fly() {System.out.println("I can fly with wing!!!");}}
/** * 子类鸭子 * @author wengn * */public class MallardDuck extends Duck {public MallardDuck(){}@Overridepublic void display() {System.out.println("I am a real Mallard duck!!");}}
/** * 测试类 * @author wengn * */public class Test {public static void main(String[] args) {Duck mallard = new MallardDuck();mallard.setFlyBehavior(new FlyWithWings());mallard.perfectFly();}}

?

热点排行