设计模式之策略模式strategy
来源:互联网 发布:解放军军装大全软件 编辑:程序博客网 时间:2024/06/04 23:35
浅谈设计模式之策略模式,简单的来说降低耦合度,使其便于程序的扩展与优化,降低对象的继承依赖,而采用起组合
在做策略模式之前,需要对需求进行分析,抽取出不变的行为与变化的行为,将其不变的行为放在基类中,将其可变化的用interface来进行定义,放在行为组中,从而进行组合
该示列源码连接地址:http://download.csdn.net/detail/mexican_jacky/9551635
一:定义顶级类 Dog
package org.strategy.base;import org.strategy.beh.DogCall;import org.strategy.beh.DogColor;/** * * @author mexican * 分析: 抽取相同补分,狗狗都会奔跑,都会吃东西 * 抽取不同部分,狗狗的叫声,狗狗的毛发颜色 */public abstract class Dog {/** * 此处正式策略模式的关键所在 */protected DogCall dogCall;protected DogColor dogColor;public void runing() {System.out.println("狗狗奔跑中.....");}public void eating(){System.out.println("狗狗吃东西中.....");}/**不同狗狗调用对应狗狗的叫声*/public void call(){dogCall.call();}/**不同狗狗的毛发颜色调用对应的毛发颜色*/public void color(){dogColor.color();}}二:抽取狗狗不同行为接口1:狗狗的叫声接口
package org.strategy.beh;/** * * @author mexican 狗狗的叫声行为 */public interface DogCall {void call();}2:狗狗的毛发颜色接口package org.strategy.beh;/** * * @author mexican 狗狗的毛发颜色 */public interface DogColor {void color();}三:不同狗狗的叫声与毛发的实现1:哈士奇
package org.strategy.beh.impl;import org.strategy.beh.DogCall;/** * * @author mexican * 哈士奇狗狗的叫声实现 */public class HSQDogCall implements DogCall {@Overridepublic void call() {System.out.println("这是哈士奇狗狗的叫声....汪汪汪!");}}
package org.strategy.beh.impl;import org.strategy.beh.DogCall;import org.strategy.beh.DogColor;/** * * @author mexican *哈士奇狗狗的黑色毛发实现 */public class HSQDogColor implements DogColor {@Overridepublic void color() {System.out.println("这是哈士奇狗狗的黑色毛发...");}}
2:金毛狗狗package org.strategy.beh.impl;import org.strategy.beh.DogCall;/** * * @author mexican 金毛狗狗的叫声实现 */public class JMDogCall implements DogCall {@Overridepublic void call() {System.out.println("这是金毛狗狗的叫声....汪汪汪!");}}package org.strategy.beh.impl;import org.strategy.beh.DogColor;/** * * @author mexican *金毛狗狗的颜色 */public class JMDogColor implements DogColor {@Overridepublic void color() {System.out.println("这是金毛狗狗的金色毛毛......");}}
四:具体的狗狗特征及狗狗行为
1:哈士奇
package org.strategy.res;import org.strategy.base.Dog;import org.strategy.beh.impl.HSQDogCall;import org.strategy.beh.impl.HSQDogColor;/** * * @author mexican 哈士奇狗狗 */public class HSQDog extends Dog {public HSQDog() {//对对应狗狗的行为进行初始化,获取对应狗狗的行为dogCall=new HSQDogCall();dogColor=new HSQDogColor();}}
2:金毛package org.strategy.res;import org.strategy.base.Dog;import org.strategy.beh.impl.JMDogCall;import org.strategy.beh.impl.JMDogColor;/** * * @author mexican 金毛狗狗 */public class JMDog extends Dog {public JMDog() {//初始化金毛狗狗的叫声与颜色dogCall=new JMDogCall();dogColor=new JMDogColor();}}五:测试结果
package org.strategy.test;import org.strategy.res.HSQDog;import org.strategy.res.JMDog;public class DogTest {public static void main(String[] args) {JMDog jmDog=new JMDog();jmDog.runing();jmDog.eating();jmDog.color();jmDog.call();System.out.println("-----------------------------------");HSQDog hsqDog= new HSQDog();hsqDog.runing();hsqDog.eating();hsqDog.call();hsqDog.color();}}
测试的输出结果为一下内容:狗狗奔跑中.....狗狗吃东西中.....这是金毛狗狗的金色毛毛......这是金毛狗狗的叫声....汪汪汪!-----------------------------------狗狗奔跑中.....狗狗吃东西中.....这是哈士奇狗狗的叫声....汪汪汪!这是哈士奇狗狗的黑色毛发...
0 0
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式之Strategy模式(策略模式)
- 设计模式之strategy策略模式
- 设计模式(DesignPattern)之策略模式(Strategy)
- 设计模式之策略模式(Strategy)
- 设计模式之Strategy(策略模式)
- strlwr
- java NIO
- Android新技术
- Android 热更新学习记录
- 怎样最高效地学习Scala
- 设计模式之策略模式strategy
- Linux设备模型之tty驱动架构分析
- [leetcode]39. Combination Sum,python实现【Medium难度】
- 7 rules of Effortless English System Secret (Ⅱ)
- Widget结论笔记
- HACK
- RxJava简介及在androidstudio中引入RxAndroid
- Spring4.2.6+SpringMVC4.2.6+MyBatis3.4.0 整合
- 路由器接口配置与管理——4