策略模式(StrategyPattern)
来源:互联网 发布:php redis 使用 编辑:程序博客网 时间:2024/05/01 17:08
策略模式: 定义算法组,分别封装起来, 让他们之间可以互相替换, 此模式让算法的变化独立于使用算法的客户。
这是我第一次正式接触设计模式, 学习了组合和interface的用法。
举个例子:跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,单目的都是为了得到MM的芳心,我的追MM锦囊中有好多Strategy哦。
在本文中, 我们用duck模型来模拟策略模式。
1、基础类:
Duck.java
public abstract class Duck {FlyBehavior flyBehavior;QuackBehavior quackBehavior;public Duck() {}public void swim() {System.out.println("[Duck]swim:");}public abstract void display();public void performFly() {flyBehavior.fly();}public void performQuack() {quackBehavior.quack();}public void setFlyBehavior(FlyBehavior fb) {flyBehavior = fb;}public void setQuackBehavior(QuackBehavior qb) {quackBehavior = qb;}}
2、FlyBehavior接口与行为实现类
FlyBehavior.java
public interface FlyBehavior {public void fly();}
FlyRocketPowered.java
public class FlyRocketPowered implements FlyBehavior {@Overridepublic void fly() {System.out.println("[FlyRocketPowered]I'm fly with a rocket!!");}}
public class FlyWithWings implements FlyBehavior {@Overridepublic void fly() {System.out.println("[Duck]I'm Flyying!!");}}
FlyNoWay.java
public class FlyNoWay implements FlyBehavior {@Overridepublic void fly() {System.out.println("[Duck]I can't fly!!");}}
3、QuackBehavior接口及其实现类
QuackBehavior.javapublic interface QuackBehavior {public void quack();}
Quack.java
public class Quack implements QuackBehavior {@Overridepublic void quack() {System.out.println("[Duck]quack");}}MuteQuack.java
public class MuteQuack implements QuackBehavior {@Overridepublic void quack() {System.out.println("[Duck]<< Silence >>");}}Squeak.java
public class Squeak implements QuackBehavior {@Overridepublic void quack() {System.out.println("[Duck]squeak");}}
4、制造一个新的鸭子类型:
public class ModelDuck extends Duck {public ModelDuck() {flyBehavior = new FlyNoWay();quackBehavior = new Quack();}@Overridepublic void display() {System.out.println("[ModelDuck]display: I'm a ModelDuck");}}
5、测试类:
MiniDuckMain.java
public class MiniDuckMain {public static void main(String[] args) {Duck model = new ModelDuck();model.performFly();model.performQuack();model.setFlyBehavior(new FlyRocketPowered());model.performFly();}}
最近在参照《Head First设计模式》书学习, 代码也参照该书编写
- 策略模式 StrategyPattern
- 策略模式(StrategyPattern)
- 策略模式(StrategyPattern)
- 策略模式(StrategyPattern)
- 策略模式StrategyPattern
- 设计模式之策略模式strategyPattern
- 第1章 策略模式【StrategyPattern】
- 【策略模式】的故事来源(StrategyPattern)
- C++设计模式一--StrategyPattern(策略模式)
- 英雄联盟开发例子生动形象地为你讲解StrategyPattern------策略模式
- StrategyPattern
- Java基础再回首之设计模式系列①-----StrategyPattern 策略者模式(案列教程,附带demo)
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- MariaDB连接
- 使用PyInstaller2将Python脚本转化为可执行文件(下-进阶使用)
- HDU3415:Max Sum of Max-K-sub-sequence(单调队列)
- 解决网络安全问题软件解析之UserLock
- 模式和框架的区别
- 策略模式(StrategyPattern)
- Hadoop新旧API的区别和联系
- 问题列表 java
- 建立英语思维
- linux网络socket 接口
- poj 1087 A Plug for UNIX(最大流)
- IE条件注释
- 投资内容简介
- 职场英语:人生道理在职场中的真义