策略模式
来源:互联网 发布:网络机房都有什么设备 编辑:程序博客网 时间:2024/06/03 23:42
策略模式
定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户
设计原则
找出应用中可能需要改变之处,把他们独立出来,不要和那些不需要变化的代码混在一起。
针对接口编程而不是针对实现编程
多用组合少用继承
下面是一个策略模式的代码,当做例子:
duck抽象类:
package design;/** * @author Mingming * @Description * @Date Created in 13:48 2017/10/29 * @Modificd By */public abstract class Duck { FlyBehavior flyBehavior; QuackBehavior quackBehavior; public abstract void display(); public void setFlyBehavior(FlyBehavior flyBehavior) { this.flyBehavior = flyBehavior; } public void setQuackBehavior(QuackBehavior quackBehavior) { this.quackBehavior = quackBehavior; } public void performQuack(){ quackBehavior.quack(); } public void performFly(){ flyBehavior.fly(); }}
duck实现类:
package design;/** * @author Mingming * @Description * @Date Created in 13:56 2017/10/29 * @Modificd By */public class ModelDuck extends Duck { @Override public void display() { System.out.println("I am a ModelDuck"); }}
FlyBehavior接口:
package design;/** * @author Mingming * @Description * @Date Created in 13:48 2017/10/29 * @Modificd By */public interface FlyBehavior { public void fly();}
FlyBehavior实现
package design;/** * @author Mingming * @Description * @Date Created in 13:49 2017/10/29 * @Modificd By */public class FlyEithWings implements FlyBehavior{ @Override public void fly() { System.out.println("I am flying"); }}package design;/** * @author Mingming * @Description * @Date Created in 13:50 2017/10/29 * @Modificd By */public class FlyNoway implements FlyBehavior{ @Override public void fly() { System.out.println("I can't fly"); }}
QuackBehavior接口:
package design;/** * @author Mingming * @Description * @Date Created in 13:51 2017/10/29 * @Modificd By */public interface QuackBehavior { public void quack();}
QuackBehavior实现:
package design;/** * @author Mingming * @Description * @Date Created in 13:51 2017/10/29 * @Modificd By */public class Quack implements QuackBehavior { @Override public void quack() { System.out.println("Quack"); }}package design;/** * @author Mingming * @Description * @Date Created in 13:52 2017/10/29 * @Modificd By */public class Squeak implements QuackBehavior { @Override public void quack() { System.out.println("squeak"); }}
测试类:
package design;/** * @author Mingming * @Description * @Date Created in 13:56 2017/10/29 * @Modificd By */public class MiniDuckSimulator { public static void main(String[] args){ ModelDuck modelDuck = new ModelDuck(); modelDuck.setFlyBehavior(new FlyEithWings()); modelDuck.setQuackBehavior(new Quack()); modelDuck.display(); modelDuck.performFly(); modelDuck.performQuack(); }}
阅读全文
0 0
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 一个简单的程序
- Count and Say--LeetCode
- 数据分析之前奏
- app启动时禁用返回键以防闪屏处理
- centos7.4安装zabbix3.4.1
- 策略模式
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- myfirstgame背景音乐设置
- atom安装插件
- SSH spring Struts hibernate 整合 xml
- vue.js常见功能插件罗列
- Xfermode初探
- 安卓最简单的文件下载, 基于OkHttp,包含下载进度、断点续传
- 《python 核心编程第二版第7章》习题