标签:
策略模式将程序中的可变部分,抽象成一个算法接口,然后在这个接口下封装一系列算法。
策略模式具有可扩展性,如果有新的需求来了,就增加新的算法就可以(更多详细可以在慕课网上看到)
比如原来有只“鸭子“ 但是它不会飞,要想给它增加一个飞行的功能,具体的实现步骤
1)定义一个飞行接口(算法接口)
2)实现一种飞行方式(具体的实现算法)
3)在“鸭子”的父类,增加一个飞行的属性,并给这个属性set方法。应用这个属性(依赖于抽象而不是依赖于具体)
4)“鸭子”具体实现类,在构造器中set 飞行的具体实现类。(算法的选择)
下面是简单的代码实现;
鸭子的父类
package duck; import fly.Fly; /** * * @author zheng.zhong *这是一个鸭子的基本属性 */ public abstract class Duck { private Fly fly; /** * 外观 */ public abstract void look(); /** * */ public abstract void jiao(); public void fly(){ fly.fly(); } public void setFly(Fly fly) { this.fly = fly; } }
飞行的接口
package fly; public interface Fly { /** * 具体的飞行方式 */ public void fly(); }
飞行的具体实现
package fly; public class FlyBywind implements Fly { @Override public void fly() { // TODO Auto-generated method stub System.out.println("用翅膀飞行"); } }
鸭子的具体实现
package duck; import fly.FlyBywind; public class YelloDuck extends Duck { YelloDuck(){ super(); super.setFly(new FlyBywind()); } @Override public void look() { System.out.println("大黄鸭"); } @Override public void jiao() { // TODO Auto-generated method stub System.out.println("--呱呱呱--"); } }
测试代码
package duck; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Duck duck=null; duck=new YelloDuck(); duck.look(); duck.jiao(); duck.fly(); } }
测试结果
大黄鸭 --呱呱呱-- 用翅膀飞行
看到结果,我们已经实现了赋予鸭子的飞行能力。并且这能力能赋予其他鸭子,代码的复用和维护性增强。这个就是策略模式。
标签:
原文地址:http://www.cnblogs.com/zhongzheng123/p/5845568.html