设计模式之策略模式
来源:互联网 发布:淘宝网女士雪地靴 编辑:程序博客网 时间:2024/06/05 21:25
本文是本人在看Head First设计模式中的策略模式后根据个人的理解写下的,若有错误之处,请批评指出。
设计原则:
1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起
2.针对接口编程,而不是针对实现编程
3.多用组合,少用继承
针对接口编程真正的意思是针对超类型编程
代码部分:
项目类图
Duck类:
public abstract class Duck { public FlyBehavior flyBehavior; public QuackBehavior quackBehavior; public void swim() { System.out.println("I'm swimming"); } public abstract void display(); public void performFly() { flyBehavior.fly(); } public void performQuack() { quackBehavior.quack(); } public void setFlyBehavior(FlyBehavior flyBehavior) { this.flyBehavior = flyBehavior; } public void setQuackBehavior(QuackBehavior quackBehavior) { this.quackBehavior = quackBehavior; }}
ModelDuck类:
public class ModelDuck extends Duck{ public ModelDuck(){ flyBehavior = new FlyNoWay(); quackBehavior = new Quack(); } public void display() { // TODO Auto-generated method stub System.out.println("I'm a Model duck!"); }}
FlyBehavior接口:
public interface FlyBehavior { void fly();}
FlyNoWay类:
public class FlyNoWay implements FlyBehavior{ public void fly() { // TODO Auto-generated method stub System.out.println("I can't fly!"); }}
FlyWithRocket类:
public class FlyWithRocket implements FlyBehavior{ public void fly() { System.out.println("I'm flying with rocket!"); }}
QuackBehavior接口:
public interface QuackBehavior { void quack();}
Quack类:
public class Quack implements QuackBehavior{ public void quack() { // TODO Auto-generated method stub System.out.println("Quack!"); }}
Driver类:
public class Driver { public static void main(String[] args) { Duck model = new ModelDuck(); model.display(); model.swim(); model.performQuack(); model.performFly(); model.setFlyBehavior(new FlyWithRocket()); model.performFly(); }}
0 0
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- CodeForces 454B Little Pony and Sort by Shift
- Patrick and Shopping
- 面试题47:不加加减乘除做加法
- 简单的应用调用驱动
- 2016夏季练习——二叉树
- 设计模式之策略模式
- POJ1236 图的一个连通性问题
- OVER(PARTITION BY)函数用法
- Volley、XUtils、Fson框架
- HDU 1016 Prime Ring Problem 素数环 搜索
- Hdu oj 1013 Digital Roots(九余数定理)
- 【汇编】addr dw number number dw Y的意思:在ADDR单元中存放着数Y的地址
- 2016ACM多校训练第一场_1001_Abandoned Country 并查集+DFS
- boost 1.56.0 编译及使用