设计模式之Strategy(策略模式系列1)

简介:

先摘抄他上面的代码,错误已经改正:

Strategy策略模式是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类.Strategy应用比较广泛,比如, 公司经营业务变化图, 可能有两种实现方式,一个是线条曲线,一个是框图(bar),这是两种算法,可以使用Strategy实现.这里以字符串替代为例, 有一个文件,我们需要读取后,希望替代其中相应的变量,然后输出.关于替代其中变量的方法可能有多种方法,这取决于用户的要求,所以我们要准备几套变量字符替代方案。

  

 
 
  1.   public  enum TestStrategy {  
  2.    
  3.     RepTempRuleOne{  
  4.         @Override  
  5.         public String replace(String oldString) {  
  6.             // TODO Auto-generated method stub  
  7.    
  8.             String newString=oldString.replaceFirst("a", "XXX");  
  9.             return newString  ;  
  10.    
  11.         }  
  12.     },  
  13.     RepTempRuleTwo{  
  14.    
  15.         @Override  
  16.         public String replace(String oldString) {  
  17.             // TODO Auto-generated method stub  
  18.             String newString=oldString.replaceFirst("n", "***");  
  19.             return newString  ;  
  20.         }  
  21.    
  22.     };  
  23.    
  24.     abstract String replace(String oldString);  
  25.    
  26.     public static void main(String... args){  
  27.         String oldString"www.zuiniuwang.com";  
  28.         RepTempRuleSolveEnum repTempRuleSolve=new RepTempRuleSolveEnum(TestStrategy.RepTempRuleOne);  
  29.         String  myNewString = repTempRuleSolve.getNewContext(oldString);  
  30.         System.out.println("newString  is "+myNewString);  
  31.         repTempRuleSolve.changeAlgorithm(TestStrategy.RepTempRuleTwo);  
  32.         myNewString = repTempRuleSolve.getNewContext(oldString);  
  33.         System.out.println("Second  New String   is "+myNewString);  
  34.    
  35.     }  
  36.    
  37. }  
  38.    
  39. class RepTempRuleSolveEnum {  
  40.     private TestStrategy strategy;  
  41.    
  42.     public RepTempRuleSolveEnum(TestStrategy rule){  
  43.           this.strategy=rule ;  
  44.     }  
  45.    
  46.     public String getNewContext(String oldString) {  
  47.         try {  
  48.             return strategy.replace(oldString);  
  49.         } catch (Exception e) {  
  50.             // TODO Auto-generated catch block  
  51.             e.printStackTrace();  
  52.         }  
  53.         return null ;  
  54.     }  
  55.    
  56.     public void changeAlgorithm(TestStrategy newAlgorithm) {  
  57.         strategy = newAlgorithm;  
  58.     }  

 

我们达到了在运行期间,可以自由切换算法的目的。

实际整个Strategy的核心部分就是抽象类的使用,使用Strategy模式可以在用户需要变化时,修改量很少,而且快速.

Strategy和Factory有一定的类似,Strategy相对简单容易理解,并且可以在运行时刻自由切换。Factory重点是用来创建对象。

Strategy适合下列场合:

1.以不同的格式保存文件;

2.以不同的算法压缩文件;

3.以不同的算法截获图象;

4.以不同的格式输出同样数据的图形,比如曲线 或框图bar等



本文转自 最牛傻蛋 51CTO博客,原文链接:http://blog.51cto.com/zuiniuwang/718358,如需转载请自行联系原作者

相关文章
|
1月前
|
设计模式 算法
设计模式之 Strategy(策略模式)
设计模式之 Strategy(策略模式)
23 1
|
1月前
|
设计模式 算法 PHP
php设计模式--策略模式(六)
php设计模式--策略模式(六)
11 0
|
4月前
|
设计模式 算法 搜索推荐
设计模式之策略模式
设计模式之策略模式
42 0
|
4月前
|
设计模式 算法 Java
行为型设计模式-策略模式(Strategy Pattern)
行为型设计模式-策略模式(Strategy Pattern)
|
14天前
|
设计模式 算法 Java
Java 设计模式:探索策略模式的概念和实战应用
【4月更文挑战第27天】策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在 Java 中,策略模式通过定义一系列的算法,并将每一个算法封装起来,并使它们可以互换,这样算法的变化不会影响到使用算法的客户。
22 1
|
1月前
|
设计模式 算法 搜索推荐
23种设计模式,策略模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】设计模式是软件工程中的一种最佳实践指导,用于解决常见的设计问题。它们被分类为创建型、结构型和行为型模式。其中,策略模式是一种行为型设计模式,旨在定义一系列算法,封装每一个算法,并使它们可互换。策略模式允许算法独立于使用它们的客户端变化
22 1
|
2月前
|
设计模式 算法
策略模式--设计模式
策略模式--设计模式
17 0
|
2月前
|
设计模式 算法 Java
【设计模式】策略模式
【设计模式】策略模式
|
4月前
|
设计模式 算法 自动驾驶
常见的设计模式(模板与方法,观察者模式,策略模式)
随着时间的推移,软件代码越来越庞大,随着而来的就是如何维护日趋庞大的软件系统。在面向对象开发出现之前,使用的是面向过程开发来设计大型的软件程序,面向过程开发将软件分成一个个单独的模块,模块之间使用函数进行组合,最后完成系统的开发,每次需要修改软件,如果不涉及好各个模块的关系,就会导致软件系统难以维护,从而导致软件变得不可使用。面向对象方法用对象模拟问题域中的实体,以对象间的联系刻画实体间联系
69 2
|
4月前
|
设计模式 算法
设计模式 | 策略模式
设计模式 | 策略模式
20 0