设计模式之策略模式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