策略模式
来源:互联网 发布:淘宝店如何开通直通车 编辑:程序博客网 时间:2024/05/24 22:43
策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
[]类图
[]策略模式的实现
飞行为接口
public interface FlyBehavior {void fly();}
飞行为实现类
public class FlyWithWings implements FlyBehavior {@Overridepublic void fly() { System.out.println("I' m flying!!");}}
飞行为实现类
public class FlyNoWay implements FlyBehavior {@Overridepublic void fly() { System.out.println("I can't fly");}}
飞行为实现类
public class FlyRocketPowered implements FlyBehavior {@Overridepublic void fly() { System.out.println("I' m flying with a rocket!!");}}
叫行为接口
public interface QuackBehavior {void quack();}
叫行为实现类
public class Quack implements QuackBehavior {@Overridepublic void quack() { System.out.println("Quack");}}
叫行为实现类
public class MuteQuack implements QuackBehavior {@Overridepublic void quack() { System.out.println("Slience");}}
叫行为实现类
public class Squeak implements QuackBehavior {@Overridepublic void quack() { System.out.println("Squeak");}}
鸭子抽象类
public abstract class Duck {protected FlyBehavior flyBehavior;protected QuackBehavior quackBehavior;public abstract void display();public void performFly() { flyBehavior.fly();}public void performQuack() { quackBehavior.quack();}public void swim() { System.out.println("All ducks float,event decoys");}public void setFlyBehavior(FlyBehavior flyBehavior) { this.flyBehavior = flyBehavior;}public void setQuackBehavior(QuackBehavior quackBehavior) { this.quackBehavior = quackBehavior;}}
鸭子实现类
public class MallardDuck extends Duck {public MallardDuck() { flyBehavior = new FlyWithWings(); quackBehavior = new Quack();}@Overridepublic void display() { System.out.println("I'm a reak Mallard duck");}}
鸭子实现类
public class ModelDuck extends Duck {public ModelDuck() { flyBehavior = new FlyNoWay(); quackBehavior = new Quack();}@Overridepublic void display() { System.out.println("I'm a model duck");}}
测试
public static void main(String args[]) { MallardDuck mallardDuck = new MallardDuck(); mallardDuck.display(); mallardDuck.performFly(); mallardDuck.performQuack(); ModelDuck modelDuck = new ModelDuck(); modelDuck.display(); modelDuck.performFly(); modelDuck.performQuack(); modelDuck.setFlyBehavior(new FlyRocketPowered()); modelDuck.performFly();}
[]
阅读全文
0 0
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 错误[error] 1366 解决方法
- 利用Lable控件输出九九乘法表
- linux多线程编程(2)
- 跑马灯代码
- 【第1100期】经常加班,怎么兼顾个人能力提升?
- 策略模式
- 这就是为什么我composer下来的laravel没有routes文件夹的原因
- 深拷贝and浅拷贝
- framest框架集
- Python3爬取妹子图——爬虫&下载网络图片
- 设计模式(8)——组合 Composite
- css总结
- 习题5.8
- 在eclipse中设置编码自动补全功能