对策略模式的理解

来源:互联网 发布:ip的端口是否打开 编辑:程序博客网 时间:2024/04/30 21:23


今天学习了一下策略模式。下面是我个人对策略模式的一些理解,并且尽可能的简化了理解。

1.策略模式的简单定义:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。

2.策略模式的三个角色:

  • 策略:策略是一个接口,可以定义若干个抽象方法。
  • 具体策略:具体策略是实现策略接口的类,重写接口所定义的方法并且给出方法体的具体内容。
  • 上下文:上下文是依赖策略接口的类,即上下文包含有策略声明的变量。上下文中提供一个方法,该方法委托策略变量调用具体策略所重写的策略接口中的方法。

3.策略模式的UML类图:

4.策略模式的一个简单例子:,

    用两种方法输出英文字母表:

        比如:一种策略的输出格式为:A,a,B,b.......Z,z

                  另一种策略的输出格式为:A,B,C....Z,a,b,....z

用java代码实现如下:

(1)策略:

public interface Strategy {//策略接口public abstract void string();}

(2)具体策略:
具体策略1:
public class StrategyOne implements Strategy{//具体策略1public void string(){//重写策略接口所定义的抽象方法for( char ch='A'; ch<='Z'; ch++){System.out.printf("%c,%c,",ch,ch+32);}}}

具体策略2:
public class StrategyTwo implements Strategy{//具体策略2public void string(){//重写策略接口所定义的抽象方法for( char ch='A'; ch<='Z'; ch++){System.out.printf("%c,",ch);}for( char ch='a'; ch<='z'; ch++){System.out.printf("%c,",ch);}}}

(3)上下文:
public class Context {//上下文Strategy strategy;// 策略声明的变量public void setStrategy(Strategy strategy){this.strategy = strategy;//设置具体是哪一个的策略}public void outString(){strategy.string();//利用策略变量调用具体策略所重写的策略接口中的方法String()}}

(4)模式的使用:
public class Application {public static void main(String args[]){Context str = new Context();//声明上下文变量str.setStrategy(new StrategyOne());//设置具体策略str.outString();System.out.println();str.setStrategy(new StrategyTwo());str.outString();}}

(5)程序运行结果:

A,a,B,b,C,c,D,d,E,e,F,f,G,g,H,h,I,i,J,j,K,k,L,l,M,m,N,n,O,o,P,p,Q,q,R,r,S,s,T,t,U,u,V,v,W,w,X,x,Y,y,Z,z,
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,


这是我自己经过理解后,用非常简单的一个例子来说明了一下策略模式的使用方法,希望对于大家学习有所帮助,有什么不妥还请指正!!!





原创粉丝点击