设计模式(1) 策略模式
来源:互联网 发布:avfun邀请码淘宝 编辑:程序博客网 时间:2024/06/07 06:36
策略模式:策略模式定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
需求: 设计一些可以动态改变的鸭子。
设计一些行为类
FlyBehavior.java (飞行动作接口,所有飞行行为必须实现该类)
package chapter1;/** * Created by fengyuwusong on 2017/7/29. *///所有飞行行为必须实现该接口public interface FlyBehavior { public void fly();}
FlyWithWings(飞行行为类,用翅膀飞)
package chapter1;/** * Created by fengyuwusong on 2017/7/29. */public class FlyWithWings implements FlyBehavior { @Override public void fly() { System.out.println("我可以用翅膀飞!"); }}
QuackBehavior.java(叫行为接口,所有叫声行为都必须实现该类)
package chapter1;/** * Created by fengyuwusong on 2017/7/29. *///实现叫声的接口public interface QuackBehavior { public void quack();}
Quack.java (叫声行为类,呱呱叫)
package chapter1;/** * Created by fengyuwusong on 2017/7/29. */public class Quack implements QuackBehavior { @Override public void quack() { System.out.println("呱呱叫!"); }}
MuteQuack.java(叫声行为类 ,不会叫的)
package chapter1;/** * Created by fengyuwusong on 2017/7/29. */public class MuteQuack implements QuackBehavior { @Override public void quack() { System.out.println("我不会叫!"); }}
设计鸭子抽象类
Duck.java(鸭子抽象类,所有鸭子的实现都必须基于该类)
package chapter1;/** * Created by fengyuwusong on 2017/7/29. */public abstract class Duck { public FlyBehavior getFlyBehavior() { return flyBehavior; } public void setFlyBehavior(FlyBehavior flyBehavior) { this.flyBehavior = flyBehavior; } public QuackBehavior getQuackBehavior() { return quackBehavior; } public void setQuackBehavior(QuackBehavior quackBehavior) { this.quackBehavior = quackBehavior; } FlyBehavior flyBehavior; QuackBehavior quackBehavior; //必须实现声明类别的方法 public abstract void display(); //将叫和飞委托给行为类 public void performFly() { flyBehavior.fly(); } public void performQuack(){ quackBehavior.quack(); } public void swim() { System.out.println("所有的鸭子都会游泳!"); }}
设计一些具体鸭子
ModelDuck.java(模型鸭,不会飞,不会叫)
package chapter1;/** * Created by fengyuwusong on 2017/7/29. */public class ModelDuck extends Duck { public ModelDuck(){ //不会飞 flyBehavior=new FlyNoWay(); //不会叫 quackBehavior=new MuteQuack(); } @Override public void display() { System.out.println("我是一只模型鸭,不会飞,不会叫!"); }}
TrueDuck.java(真正的鸭子,会飞,会叫)
package chapter1;/** * Created by fengyuwusong on 2017/7/29. */public class TrueDuck extends Duck{ public TrueDuck() { flyBehavior=new FlyWithWings(); quackBehavior=new Quack(); } @Override public void display() { System.out.println("我是一只真正的鸭子,,会飞,会叫!"); }}
编写测试类
test.java
package chapter1;/** * Created by fengyuwusong on 2017/7/29. */public class test { public static void main(String[] args) {// 新建一个模型鸭 这里使用 Duck Duck model=new ModelDuck(); model.display(); model.performFly(); model.performQuack();// 新建一个真正的鸭子 Duck trueDuck=new TrueDuck(); trueDuck.display(); trueDuck.performFly(); trueDuck.performQuack(); //动态改变模型鸭子的行为,给他装上翅膀 model.setFlyBehavior(new FlyWithWings()); model.performFly(); }}
运行结果
我是一只模型鸭,不会飞,不会叫!
我不会飞!
我不会叫!
我是一只真正的鸭子,,会飞,会叫!
我可以用翅膀飞!
呱呱叫!
我可以用翅膀飞!
文章参考Head First 设计模式
阅读全文
2 0
- 设计模式(1)—策略模式
- 设计模式1: 策略模式(Strategy)
- 设计模式(1) 策略模式
- 设计模式(1)--策略模式
- 设计模式-1-策略模式
- 设计模式1:策略模式
- 设计模式(1)---策略模式
- <设计模式>(1)策略模式
- 设计模式(策略模式)
- 设计模式(策略模式)
- 设计模式(策略模式)
- 设计模式(策略模式)
- 设计模式:2)策略设计模式
- 设计模式-策略模式
- 设计模式:策略模式
- 设计模式-策略模式
- 设计模式 - 策略模式
- 设计模式-策略模式
- H5炫酷特效系列1——canvas满屏幕变换爱心示例
- jdbc util
- CleanMyMac3.8.4 破解版 持续更新(包含激活码)
- jquery的each方法使用
- Exiv2 With XMP for Android
- 设计模式(1) 策略模式
- 学习JEE规范,去看JBoss源码;学习类加载器,去看OSGI源码
- FileUpload文件上传
- 网页之路
- 2017多校训练赛第一场 HDU 6041 I Curse Myself(仙人掌图生成树)
- javaseday07(数组工具,单例设计模式,继承)
- 最容易理解的傅里叶变换讲解(完整版)
- C++实现单例类
- 喷水装置(一)