设计模式-策略模式
来源:互联网 发布:c语言成绩查询系统湖北 编辑:程序博客网 时间:2024/06/07 01:00
策略模式(定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户)
1、把鸭子的行为比作是一族算法,那么可以很容易的使用算法计算不同州的销售税金。
2、可以在运行时动态的改变行为。
3、行为中可以添加属性。
4、要添加新的行为只需要定义行为接口,编写实现行为接口的具体行为,然后在Duck中引用该行为
(1) 找出应用中可能需要变化的代码独立出来,不要和不需要变化的代码混在一起。
(2) 针对接口编程,而不是针对实现编程。
(3) 多用组合,少用继承。
public abstract class Duck { public FlyBehavior flyBehavior; public QuackBehavior quackBehavior; public Duck(){ super(); } public void fly(){ flyBehavior.fly(); } public void quack(){ quackBehavior.quack(); } public void swing(){ System.out.println("I am Swing."); } public abstract void display(); public void setFlyBehavior(FlyBehavior flyBehavior) { this.flyBehavior = flyBehavior; } public void setQuackBehavior(QuackBehavior quackBehavior) { this.quackBehavior = quackBehavior; }}
public interface QuackBehavior { public void quack();}
public interface FlyBehavior { public void fly();}public class Squack implements QuackBehavior { @Override public void quack() { System.out.println("========Squack========="); }}public class Quack implements QuackBehavior { @Override public void quack() { System.out.println("========quack========="); }}
public class FlyWithWing implements FlyBehavior { @Override public void fly() { System.out.println("I am flying."); }}public class FlyNoWay implements FlyBehavior { @Override public void fly() { System.out.println("sorry, I can not fly."); }}public class Aduck extends Duck { public Aduck(){ this.flyBehavior = new FlyWithWing(); this.quackBehavior = new Quack(); } @Override public void display() { System.out.println("I am A duck."); }}public class DuckTest { public static void main(String[] args) { Duck duck = new Aduck(); duck.fly(); duck.swing(); duck.quack(); duck.display(); System.out.println("------change duck behavior begin"); duck.setFlyBehavior(new FlyNoWay()); duck.fly(); }}
阅读全文
0 0
- 设计模式-策略模式
- 设计模式:策略模式
- 设计模式-策略模式
- 设计模式 - 策略模式
- 设计模式-策略模式
- 设计模式-----策略模式
- 设计模式 策略模式
- 设计模式-策略模式
- 设计模式-【策略模式】
- 设计模式-----策略模式
- 设计模式-策略模式
- 设计模式--策略模式
- 设计模式- 策略模式
- 设计模式- 策略模式
- 设计模式------策略模式
- 设计模式--策略模式
- 设计模式-策略模式
- 设计模式--策略模式
- Http 资源服务器 搭建 HFS
- Java main函数的命令行参数
- JVM内存管理机制
- 重载运算符时的参数和返回类型要用引用的说明
- java.io.IOException: Connection reset by peer
- 设计模式-策略模式
- 文章标题 POJ 3468 : A Simple Problem with Integers (线段树)
- SQLiteOpenHelper 用单例模式实现后 onCreate 方法不执行的解决过程
- 《数据结构(C语言版)》- 绪论
- jqGrid学习
- 北京科技大学-银行系统设计基础知识分享
- 第12篇:ng-class的用法
- Ajax
- 【二叉树】二分查找树,节点删除【Add to List 450. Delete Node in a BST】