设计模式之策略模式
来源:互联网 发布:灵界室友网络剧百度云 编辑:程序博客网 时间:2024/05/18 17:41
策略模式的设计原则: 1.找出应用中需要变化的部分,把他们独立出来,不要和那些不需要变化的代码混在一起 2.面向接口编程,而不是面向实现编程 3.多用组合,少用继承策略模式的实现 1.通过分离变化得出策略接口Strategy典型模型:public interface FlyingStragety { void performFly(); }
2.为策略接口提供实现类public class FlyingWithWin implements FlyingStragety { @Override public void performFly() { System.out.println("一飞冲天"); } }public class FlyingNoway implements FlyingStragety { @Override public void performFly() { System.out.println("我是大黄,我不会飞行"); }}
3.客户程序中要有一个策略引用private FlyingStragety mFlyingStragety; /* * 用来设置不同的飞行方式 * */ public void setFlyingStragety(FlyingStragety flyingStragety) { mFlyingStragety = flyingStragety; } /* * 实现飞行方法 * */ public void fly(){ mFlyingStragety.performFly(); }
4.在客户端程序中选择、组装正确的策略实现类public BigYellowDuck() { super(); super.setFlyingStragety(new FlyingNoway()); }
策略模式的优点:
1.使用了组合,是架构更加灵活
2.富有弹性,可以较好地应对变化
3.更好的代码复用性
4.消除大量的条件语句
策略模式的缺点:
1.客户代码要了解每个策略实现的细节
2.增加对象的数目策略模式的使用场景策略模式的使用场景: 1.许多相关的类仅仅是行为的差异 2.运行时选取不同的算法变体
1.创建抽象类public abstract class Duck { /* * 通用行为,由超类实现 * */ public void quack(){ System.out.println("嘎嘎嘎"); } public abstract void disPlay(); private FlyingStragety mFlyingStragety; /* * 用来设置不同的飞行方式 * */ public void setFlyingStragety(FlyingStragety flyingStragety) { mFlyingStragety = flyingStragety; } /* * 实现飞行方法 * */ public void fly(){ mFlyingStragety.performFly(); }}2.创建子类继承上面抽象类public class RedheadDuck extends Duck { public RedheadDuck() { super(); //将飞行策略实现类设置在不同的种类鸭子类中 super.setFlyingStragety(new FlyingWithWin()); } @Override public void disPlay() { System.out.println("我的头是红色的鸭子"); }}public class BigYellowDuck extends Duck { public BigYellowDuck() { super(); super.setFlyingStragety(new FlyingNoway()); } @Override public void disPlay() { System.out.println("我是一只黄黄的鸭子"); }}3.主函数Duck duck = new RedheadDuck(); duck.disPlay(); duck.quack(); duck.fly(); duck = new BigYellowDuck(); duck.disPlay(); duck.quack(); duck.fly();
0 0
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- Android-托管UI fragment
- 1019. 数字黑洞 (20)/PAT/YHF/2016.11.21
- 非深户社保满一年走生育险流程。
- C语言中system()执行cmd命令打开关闭程序
- Java多线程中join方法的理解
- 设计模式之策略模式
- 单例模式 Redis
- 自定义相机、相册(相册篇)
- iOS开发信任SSL证书和自签名证书实现HTTPS
- 【Android Meditation】二次封装
- wincecabmanager制作cab包以及解压cab包可以查看详细信息(包含的文件等)
- 【32页PPT】读懂基础机器学习算法
- undefined与null的总结
- SNV自动定时更新