【Head First设计模式】-Strategy模式
一、从订餐开始
小王和小刘两人到餐厅点餐,两人分别如下告诉厨师。
小王:我要一杯加了香草冰淇淋的巧克力汽水。
小刘:一个黑与白。
这两人点的餐有什么不同呢?其实是一样的,都是同一份。只是小刘用专业的名字说来出,厨师一听就明白。但小王没有,他不懂,因此他与厨师之间没有“共享的词汇”。共享的词汇不仅方便顾客点餐,也让厨师不用记太多的事。
设计模式就是让我们与其它的开发人员之间的共享词汇,一旦懂得这些共享词汇,和其它开发人员之间的沟通就容易很多。也让那些不懂设计模式的程序开始学习模式。设计模式可以把思考架构的层次提高到模式层面,而不仅仅停留在琐碎的对象上。
二、Strategy模式
1、两大原则
设计模式真正体现的是Java的原则,而这些原则又通过这些优秀的模式反映出来。有些面向对象的原则,适用于所有的模式,当无法找到适当的模式解决问题时,这些原则就是唯一的标准了。Strategy模式体现了如下的两大原则:
l 针对接口编程,而不是针对实现编程。
l 多用组合,少用继承。
2.传统设计 3.strategy设计 三、代码实现 1.抽象类Duck.java package com.sterning.ch1_strategy; import com.sterning.ch1_strategy.behavior.FlyBehavior; import com.sterning.ch1_strategy.behavior.QuackBehavior; public abstract class Duck { FlyBehavior flyBehavior; QuackBehavior quackBehavior; public void setFlyBehavior(FlyBehavior flyBehavior) { this.flyBehavior = flyBehavior; } public void setQuackBehavior(QuackBehavior quackBehavior) { this.quackBehavior = quackBehavior; } public Duck(){ } public abstract void display(); public void performFly(){ flyBehavior.fly(); } public void performQuack(){ quackBehavior.quack(); } public void swim(){ System.out.println("All ducks float,even decoys!"); } } 2.行为封装类 (1)接口 接口FlyBehavior.java package com.sterning.ch1_strategy.behavior; public interface FlyBehavior { public void fly(); } 接口FlyBehavior.java package com.sterning.ch1_strategy.behavior; public interface QuackBehavior { public void quack(); }
3.strategy设计
三、代码实现
1.抽象类Duck.java
2.行为封装类
(1)接口
接口FlyBehavior.java
(2)实现
FlyNoWay.java
FlyRocketPowered.java
FlyWithWings.java
MuteQuack.java
Quack.java
Squeak.java
3.实现类
MallardDuck.java
ModelDuck.java
4.测试类
MiniDuckSimulator.java
Powered by: BlogJava Copyright © 诗特林