Head First 设计模式(1):策略模式
来源:互联网 发布:唯歌生民病 愿得天子知 编辑:程序博客网 时间:2024/06/05 20:07
策略模式:定义了算法族,分别封装起来,相互之间可以互相替换,让算法的变化独立于使用算法的客户。
例子:
代码:
package headfirst.designpatterns.strategy;public abstract class Duck {FlyBehavior flyBehavior;QuackBehavior quackBehavior;public Duck() {}public void setFlyBehavior(FlyBehavior fb) {flyBehavior = fb;}public void setQuackBehavior(QuackBehavior qb) {quackBehavior = qb;}abstract void display();public void performFly() {flyBehavior.fly();}public void performQuack() {quackBehavior.quack();}public void swim() {System.out.println("All ducks float, even decoys!");}}public interface FlyBehavior { public void fly();}public interface QuackBehavior { public void quack();}public class MallardDuck extends Duck { public MallardDuck() { quackBehavior = new Quack(); flyBehavior = new FlyWithWings(); } public void display() { System.out.println("I'm a real Mallard duck"); }}public class RedHeadDuck extends Duck { public RedHeadDuck() { flyBehavior = new FlyWithWings(); quackBehavior = new Quack(); } public void display() { System.out.println("I'm a real Red Headed duck"); }}public class RubberDuck extends Duck { public RubberDuck() { flyBehavior = new FlyNoWay(); quackBehavior = new Squeak(); } public void display() { System.out.println("I'm a rubber duckie"); }}public class DecoyDuck extends Duck { public DecoyDuck() { setFlyBehavior(new FlyNoWay()); setQuackBehavior(new MuteQuack()); } public void display() { System.out.println("I'm a duck Decoy"); }}public class ModelDuck extends Duck { public ModelDuck() { flyBehavior = new FlyNoWay(); quackBehavior = new Quack(); } public void display() { System.out.println("I'm a model duck"); }}public class FlyWithWings implements FlyBehavior { public void fly() { System.out.println("I'm flying!!"); }}public class FlyNoWay implements FlyBehavior { public void fly() { System.out.println("I can't fly"); }}public class FlyRocketPowered implements FlyBehavior { public void fly() { System.out.println("I'm flying with a rocket"); }}public class Quack implements QuackBehavior { public void quack() { System.out.println("Quack"); }}public class Squeak implements QuackBehavior { public void quack() { System.out.println("Squeak"); }}public class MuteQuack implements QuackBehavior { public void quack() { System.out.println("<< Silence >>"); }}public class FakeQuack implements QuackBehavior { public void quack() { System.out.println("Qwak"); }}public class MiniDuckSimulator { public static void main(String[] args) { MallardDuck mallard = new MallardDuck(); RubberDuck rubberDuckie = new RubberDuck(); DecoyDuck decoy = new DecoyDuck(); Duck model = new ModelDuck(); mallard.performQuack(); rubberDuckie.performQuack(); decoy.performQuack(); model.performFly(); model.setFlyBehavior(new FlyRocketPowered()); model.performFly(); }}
0 0
- Head First 设计模式:1策略模式
- Head First设计模式1----------策略模式
- Head First 设计模式(1)- 策略模式 笔记
- Head First 设计模式(1):策略模式
- Head First设计模式学习笔记-------(1)策略模式
- 《Head First 设计模式》模式1——策略模式
- 《head first 设计模式》之策略模式
- head first 设计模式:策略模式
- 策略模式 - head first设计模式
- Head First 设计模式第一章 ----策略模式
- 《Head First设计模式》策略模式
- Head First设计模式-策略模式
- 【Head First设计模式】策略模式
- 《Head First 设计模式》策略模式
- 《Head First设计模式》之策略模式
- 《Head First 设计模式》之策略模式
- <Head First 设计模式>:策略模式--Duck
- Head First设计模式—策略模式
- 排序算法之直接插入排序Java版
- Android基础知识_绑定Service
- 基于Service的音乐播放器
- golang 工程目录结构
- SIFT特征提取分析
- Head First 设计模式(1):策略模式
- Java如何连接Access数据库(两种方式实例代码)
- Irrlicht 3D Engine 笔记系列 之 教程6- 2D Graphics
- 两种用于派生的Singleton模式(以TextureMgr为例)
- 黑马程序员-----IO流
- 控制切换场景淡入淡出的教程
- Adaboost 算法的原理与推导(强烈推荐)
- JSON 之JAVA 解析
- 友元函数、类和运算符重载