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

java—策略模式(Strategy pattern)

阅读更多

4.策略模式(Strategy pattern)

 

 

策略模式我个人觉得自己平时用得很多,怎么说呢,其实策略模式也就是多态,测试类(主类)的方法传入的参数对象定为接口,然后传入不同的对象(实现了该接口的),然后在里面调用它们各自的方法,即实现了根据传入对象的不同而执行不同行为

 

例子android,定义一个通用接口比如是view,有一个方法是点击

有3个类,按钮类,图像类,开关类,它们各自实现了点击的方法

然后在测试类里面写一个test方法,方法的语句是v.click()传入参数对象为view接口,然后分别传入这3个类的对象,结果是根据这个3个不同的对象,实现了不同的点击方法,这就是策略模式

 

 

 

 

 

 

 

 

 

 

注:java设计模式 策略模式详解 http://yangguangfu.iteye.com/blog/815107

 

 

 

java设计模式之——策略模式

 

1,什么是策略模式?

策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

 

2,策略模式有什么好处?

     策略模式的好处在于你可以动态的改变对象的行为。

 

3,设计原则

  
     设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(c++z中可以用虚类),然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。下面是一个例子。 


      策略模式属于对象行为型模式,主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响 到客户端的情况下发生变化。通常,策略模式适用于当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种实现方式时使用。

 

4 ,策略模式中有三个对象:
(1)       环境对象:该类中实现了对抽象策略中定义的接口或者抽象类的引用。
(2)       抽象策略对象:它可由接口或抽象类来实现。
(3)       具体策略对象:它封装了实现同不功能的不同算法。
利用策略模式构建应用程序,可以根据用户配置等内容,选择不同有算法来实现应用程序的功能。具体的选择有环境对象来完成。采用这种方式可以避免由于使用条件语句而带来的代码混乱,提高应用程序的灵活性与条理性。

 

5,应用场景举例:

 

刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开能解决棘手问题,嘿,还别说,真解决了大问题,搞到最后是周瑜陪了夫人又折兵,那咱们先看看这个场景是什么样子的。

 

先说说这个场景中的要素:三个妙计,一个锦囊,一个赵云,妙计是亮哥给的,妙计放在锦囊里,俗称就是锦囊妙计嘛,那赵云就是一个干活的人,从锦囊取出妙计,执行,然后获胜。用java程序怎么表现这些呢?

那我们先来看看图?


 

三个妙计是同一类型的东西,那咱就写个接口:

Java代码   收藏代码
  1. package com.yangguangfu.strategy;  
  2. /** 
  3.  *  
  4.  * @author trygf521@126.com:阿福 
  5.  * 首先定义一个策略接口,这是诸葛亮老人家给赵云的三个锦囊妙计的接口。 
  6.  */  
  7. public interface IStrategy {  
  8.     //每个锦囊妙计都是一个可执行的算法。  
  9.     public void operate();  
  10.   
  11. }  
 

然后再写三个实现类,有三个妙计嘛:

 

妙计一:初到吴国:

Java代码   收藏代码
  1. package com.yangguangfu.strategy;  
  2. /** 
  3.  *  
  4.  * @author trygf521@126.com:阿福 
  5.  * 找乔国老帮忙,使孙权不能杀刘备。 
  6.  */  
  7. public class BackDoor implements IStrategy {  
  8.   
  9.     @Override  
  10.     public void operate() {  
  11.         System.out.println("找乔国老帮忙,让吴国太给孙权施加压力,使孙权不能杀刘备...");  
  12.     }  
  13.   
  14. }  
 

妙计二:求吴国太开个绿灯,放行:

Java代码   收藏代码
  1. package com.yangguangfu.strategy;  
  2. /** 
  3.  *  
  4.  * @author trygf521@126.com:阿福 
  5.  * 求吴国太开个绿灯。 
  6.  */  
  7. public class GivenGreenLight implements IStrategy {  
  8.   
  9.     @Override  
  10.     public void operate() {  
  11.         System.out.println("求吴国太开个绿灯,放行!");  
  12.           
  13.     }  
  14.   
  15. }  

 妙计三:孙夫人断后,挡住追兵:

Java代码   收藏代码
  1. package com.yangguangfu.strategy;  
  2. /** 
  3.  *  
  4.  * @author trygf521@126.com:阿福 
  5.  * 孙夫人断后,挡住追兵。 
  6.  */  
  7. public class BlackEnemy implements IStrategy {  
  8.   
  9.     @Override  
  10.     public void operate() {  
  11.         System.out.println("孙夫人断后,挡住追兵...");  
  12.   
  13.     }  
  14.   
  15. }  

 

好了,大家看看,三个妙计是有了,那需要有个地方放妙计啊,放锦囊里:

 

Java代码   收藏代码
  1. package com.yangguangfu.strategy;  
  2. /** 
  3.  *  
  4.  * @author trygf521@126.com:阿福 
  5.  * 
  6.  */  
  7. public class Context {  
  8.       
  9.     private IStrategy strategy;  
  10.     //构造函数,要你使用哪个妙计  
  11.     public Context(IStrategy strategy){  
  12.         this.strategy = strategy;  
  13.     }  
  14.       
  15.     public void operate(){  
  16.         this.strategy.operate();  
  17.     }  
  18.   
  19. }  
 

 

然后就是赵云雄赳赳的揣着三个锦囊,拉着已步入老年行列,还想着娶纯情少女的,色咪咪的刘备老爷子去入赘了,嗨,还别说,亮哥的三个妙计还真不错,瞧瞧:

Java代码   收藏代码
  1. package com.yangguangfu.strategy;  
  2.   
  3. public class ZhaoYun {  
  4.   
  5.     /** 
  6.      * 赵云出场了,他根据诸葛亮给他的交代,依次拆开妙计 
  7.      */  
  8.     public static void main(String[] args) {  
  9.         Context context;  
  10.           
  11.         //刚到吴国的时候拆开第一个  
  12.         System.out.println("----------刚刚到吴国的时候拆开第一个---------------");  
  13.         context = new Context(new BackDoor());  
  14.         context.operate();//拆开执行  
  15.         System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n");  
  16.           
  17.         //当刘备乐不思蜀时,拆开第二个  
  18.         System.out.println("----------刘备乐不思蜀,拆第二个了---------------");  
  19.         context = new Context(new GivenGreenLight());  
  20.         context.operate();//拆开执行  
  21.         System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n");  
  22.           
  23.         //孙权的小追兵了,咋办?拆开第三个锦囊  
  24.         System.out.println("----------孙权的小追兵了,咋办?拆开第三个锦囊---------------");  
  25.         context = new Context(new BlackEnemy());  
  26.         context.operate();//拆开执行  
  27.         System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n");  
  28.     }  
  29.   
  30. }  
 

后话:就这三招,搞得的周郎是“赔了夫人又折兵”呀!这就是策略模式,高内聚低耦合的特点也表现出来了,还有一个就是扩展性,也就是OCP原则,策略类可以继续添加下去气,只是修改Context.java就可以了,这个不多说了,自己领会吧。

 

0
1
分享到:
评论

相关推荐

    《JAVA与模式》之策略模式

    javase 设计模式的strategy pattern《JAVA与模式》之策略模式详解

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    1、策略模式STRATEGY PATTERN 2、代理模式PROXY PATTERN 3、单例模式SINGLETON PATTERN 4、多例模式MULTITION PATTERN 5、工厂方法模式FACTORY METHOD PATTERN 6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式...

    33种JAVA设计模式DEMO

    策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor Pattern) 4 J2EE 模式 这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。 MVC 模式(MVC Pattern) 业务代表...

    用Java实现23种设计模式

    策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor Pattern) 4. J2EE 模式 MVC 模式(MVC Pattern) 业务代表模式(Business Delegate Pattern) 数据访问对象模式(Dao ...

    Java设计模式,并加上个人理解

    6. 策略模式 (Strategy Pattern) 7. 适配器模式 (Adapter Pattern) 8. 模板方法模式 (Template Pattern) 9. 建造者模式 (Builder Pattern) 10. 原型模式 (Prototype Pattern) 11. 组合模式 (Composite ...

    JAVA设计模式.rar

    策略模式【STRATEGY PATTERN】 代理模式【PROXY PATTERN】 单例模式【SINGLETON PATTERN】  多例模式【MULTITION PATTERN】  工厂方法模式【FACTORY METHOD PATTERN】 抽象工厂模式【ABSTRACT FACTORY...

    design-pattern-java.pdf

    处理对象的多种状态及其相互转换——状态模式(五) 处理对象的多种状态及其相互转换——状态模式(六) 策略模式-Strategy Pattern 算法的封装与切换——策略模式(一) 算法的封装与切换——策略模式(二) 算法的...

    设计模式_策略模式.zip

    在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 策略模式java-demo 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 ...

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式

    pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 ...

    java设计模式---诙谐易懂版

    第 1 章 策略模式【Strategy Pattern】 刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题, 嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱们先看...

    strategy-pattern:Java 中的策略模式片段

    策略模式 Java 中的策略模式片段

    java设计模式

    第 1 章 策略模式【Strategy Pattern】 刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题, 嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱们先看看这个...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷8

    pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 ...

    StrategyGenerator (inactive):Java中的策略模式代码生成器-开源

    StrategyStateGenerator项目提供了Strategy Pattern和State Pattern Java源代码的生成。 但是,API已更改。 尽管类结构相同,但已将类和方法名称重命名。 还添加了一些其他方法来支持状态模式生成。

    java高手真经 (UML建模+设计模式+面向服务架构) 卷1

    pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 ...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷9

    pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 ...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷3

    pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 ...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷6

    pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 ...

    strategy_pattern.rar

    策略模式demo-处理不同订单类型的订单-->策略模式的核心是要把频繁发生变化的部分封装起来,作用是把变化部分的影响隔离开,避免局部的变化对其它fixed部分造成影响,设计时可能需要更多的时间,但便于维护、复用与...

    软件开发中的23种设计模式

    23种模式(Pattern) 1、创建形模式: 1)、单用型:Singleton 2)、工厂方法型:Factory Method 3)、抽象工厂型:Abstract Factory 4)、原型:Prototype ...1)、策略模式:Strategy 2)、观察者模式:Observer

Global site tag (gtag.js) - Google Analytics