`
王树雄
  • 浏览: 241955 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

第1章 策略模式【Strategy Pattern】

阅读更多
刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱们先看看这个场景是什么样子的。
先说这个场景中的要素:三个妙计,一个锦囊,一个赵云,妙计是小亮同志给的,妙计是放置在锦囊里,俗称就是锦囊妙计嘛,那赵云就是一个干活的人,从锦囊中取出妙计,执行,然后获胜,用JAVA程序怎么表现这个呢?我们先看类图:
三个妙计是同一类型的东东,那咱就写个接口:
package com.cbf4life.strategy;
/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
* 首先定一个策略接口,这是诸葛亮老人家给赵云的三个锦囊妙计的接口
*
*/
public interface IStrategy {
//每个锦囊妙计都是一个可执行的算法
public void operate();
}

然后再写三个实现类,有三个妙计嘛:
package com.cbf4life.strategy;
/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
* 找乔国老帮忙,使孙权不能杀刘备
*/
public class BackDoor implements IStrategy {
public void operate() {
System.out.println("找乔国老帮忙,让吴国太给孙权施加压力");
}
}
package com.cbf4life.strategy;
/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
* 求吴国太开个绿灯
*/
public class GivenGreenLight implements IStrategy {
public void operate() {
System.out.println("求吴国太开个绿灯,放行!");
}
}
package com.cbf4life.strategy;
/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
* 孙夫人断后,挡住追兵
*/
public class BlockEnemy implements IStrategy {
public void operate() {
System.out.println("孙夫人断后,挡住追兵");
}
}}


好了,大家看看,三个妙计是有了,那需要有个地方放这些妙计呀,放锦囊呀:
package com.cbf4life.strategy;
/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
* 计谋有了,那还要有锦囊
*/
public class Context {
//构造函数,你要使用那个妙计
private IStrategy straegy;
public Context(IStrategy strategy){
this.straegy = strategy;
}
//使用计谋了,看我出招了
public void operate(){
this.straegy.operate();
}
}
然后就是赵云雄赳赳的揣着三个锦囊,拉着已步入老年行列的、还想着娶纯情少女的、色迷迷的刘老爷子去入赘了,嗨,还别说,小亮的三个妙计还真是不错,瞅瞅:
package com.cbf4life.strategy;
/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
*/
public class ZhaoYun {
/**
* 赵云出场了,他根据诸葛亮给他的交代,依次拆开妙计
*/
public static void main(String[] args) {
Context context;
//刚刚到吴国的时候拆第一个
System.out.println("-----------刚刚到吴国的时候拆第一个-------------");
context = new Context(new BackDoor()); //拿到妙计
context.operate(); //拆开执行
System.out.println("\n\n\n\n\n\n\n\n");
//刘备乐不思蜀了,拆第二个了
System.out.println("-----------刘备乐不思蜀了,拆第二个了-------------");
context = new Context(new GivenGreenLight());
context.operate(); //执行了第二个锦囊了
System.out.println("\n\n\n\n\n\n\n\n");
//孙权的小兵追了,咋办?拆第三个
System.out.println("-----------孙权的小兵追了,咋办?拆第三个-------------");
context = new Context(new BlockEnemy());
context.operate(); //孙夫人退兵
System.out.println("\n\n\n\n\n\n\n\n");
/*
*问题来了:赵云实际不知道是那个策略呀,他只知道拆第一个锦囊,
*而不知道是BackDoor这个妙计,咋办? 似乎这个策略模式已经把计谋名称写出来了
*
* 错!BackDoor、GivenGreenLight、BlockEnemy只是一个代码,你写成first、second、third,没人会说你错!
*
* 策略模式的好处就是:体现了高内聚低耦合的特性呀,缺点嘛,这个那个,我回去再查查
*/
}
}
就这三招,搞的周郎是“陪了夫人又折兵”呀!这就是策略模式,高内聚低耦合的特点也表现出来了,还有一个就是扩展性,也就是OCP原则,策略类可以继续增加下去,只要修改Context.java就可以了,这个不多说了,自己领会吧。
说明:来自 秦小波《设计模式之禅》
分享到:
评论

相关推荐

    桥接模式和策略模式的区别,内含可运行代码和两者详细区别

    而策略模式(Strategy Pattern)则是定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用它的客户端。它主要用于处理那些具有多种行为的对象,可以根据具体情境选择不同...

    C#设计模式_设计模式_C#_

    创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4.... 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    物件導向策略模式

    在物件導向設計中,策略模式(Strategy Pattern)是一種常用的设计模式,用於定義一系列的算法,並將每一個算法封裝起來,使它們可以互相替換。本文將從物件導向的角度出發,探討如何利用策略模式來實現鬆耦合...

    java设计模式(电子书)

    第1章策略模式(STRATEGY PATTERN):该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,策略模式让算法的变化独立于使用它的客户端。通过这种方式,你可以根据需要灵活地切换不同的策略,提高...

    设计模式 design pattern

    第1章 引言 1 1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 ...

    Design Pattern FrameworkTM

    - 提供了一个策略模式 (Strategy Pattern) 的实例,用以演示如何在 .NET 中实现设计模式。 - **第 2 章:观察者模式**(页码:4) - 详细解释了观察者模式的原理及应用场景。 - 分析了观察者模式在 .NET 平台上的...

    设计模式解析习题解答,已经做好目录标签

    - 第9章的策略模式(Strategy Pattern)允许在运行时动态选择算法或策略。 - 第10章的桥接模式(Bridge Pattern)分离抽象接口和其实现,使得两者可以独立变化。 - 第11章的抽象工厂模式(Abstract Factory Pattern...

    headfirst design pattern C++ code(first chapter strategy)

    在C++实现中,第一章节主要讲解了“策略”(Strategy)设计模式。策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。 策略模式的核心思想是定义一系列算法,并将每一个算法封装起来,使它们可以相互...

    深入PHP:面向对象、模式与实践(第3版)第5到8章

    可能涵盖了一些经典的设计模式,如策略模式(Strategy Pattern)用于定义一系列算法,并将每个算法封装起来,使它们可以相互替换,以及模板方法模式(Template Method Pattern)用于在抽象类中定义算法的框架,允许...

    24种java设计模式介绍与6大设计原则

    #### 第1章 策略模式(Strategy Pattern) 策略模式是一种行为型设计模式,它定义了一系列的算法,并将每一个算法封装起来,使得它们可以互相替换。策略模式让算法的变化独立于使用算法的客户。 ##### 场景描述 在...

    Java设计模式之禅

    1. 策略模式(Strategy Pattern):允许在运行时选择算法的行为,如书中提到的“锦囊妙计”例子,通过不同的策略应对不同的情形。 2. 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问,常...

    我们的设计模式(绝对通俗易懂)

    #### 第1章:策略模式(Strategy Pattern) **策略模式**是一种行为型设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换。这样做的好处是可以使得算法的变化独立于使用算法的客户。简单来...

    软件设计精要与模式(源代码)

    2. **设计模式**:资料中可能包含了如工厂模式(Factory Pattern)、单例模式(Singleton Pattern)、观察者模式(Observer Pattern)、装饰器模式(Decorator Pattern)、策略模式(Strategy Pattern)等常见的设计...

    用生动的例子讲述设计模式

    ### 第1章:策略模式(Strategy Pattern) #### 概念: 策略模式定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换。该模式让算法独立于使用它的客户。 #### 适用场景: - 当一个类的行为或其算法...

    C++设计模式之禅

    ### 第1章 策略模式 (Strategy Pattern) **定义**: 策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户端。 **应用场景**: 当某个类的行为或...

    Java设计模式(第二版)中文版

    - **策略模式**(Strategy Pattern) - **模板方法模式**(Template Method Pattern) - **观察者模式**(Observer Pattern) - **命令模式**(Command Pattern) - **迭代器模式**(Iterator Pattern) - **...

Global site tag (gtag.js) - Google Analytics