文档库 最新最全的文档下载
当前位置:文档库 › 黑马程序员浅谈设计模式-策略模式2

黑马程序员浅谈设计模式-策略模式2

黑马程序员浅谈设计模式-策略模式2
黑马程序员浅谈设计模式-策略模式2

【黑马程序员济南】策略设计模式2

上一篇里我们介绍了策略模式,最后留给大家一个问题,如何把策略模式和工厂模式结合起来去应用,不知大家有没有把这两个设计模式叠加起来应用,今天我给大家聊一聊我是如何应用的,这只是代表了个人观点,如果你有更好的方法,欢迎留言交流学习。

就像上一篇策略模式代码中所体现的那样,我们会发现我们的客户端还是比较臃肿,生成了很多Context的类,我们能不能把策略模式和工厂模式相结合呢,在桥梁类Context中去做判断和生成不同业务逻辑相对应的业务类呢?代码如下:

/**

*Context类,用于和外界进行联系的类,用来对StrategySuper的引用

***/

class Context{

StragerySuper stragerySuper = null;

public Context(String type){

//初始化时传递类型,直接在Context类中生成相对应的实现类

switch(type){

case"A":

stragerySuper = new ConcreteA();

break;

case"B":

stragerySuper = new ConcreteB();

break;

case"C":

stragerySuper = new ConcreteC();

break;

}

}

//上下文接口,根据具体的策略对象,调用其算法的方法,执行具体的逻辑方法publicvoid ContextInterface(){

stragerySuper.AlphInterfact();

}

}

/**

*客户端代码,通过Context中间类,来实现对具体实现类的调用

**/

class Client{

Context context;

publicvoid main(){

//在客户端,我们可以直接调用,而不用去全部生成判断了

Context con = new Context("A");

con.ContextInterface();

}

}

这样客户端的代码是不是简洁了许多,我们把很多逻辑上的操作都封装在我们的Context 类中,这样我们的客户端就看不到我们的逻辑实现,用户只需要传递他需要的类型,用户就能获取对应的结果值,对于用户来说简单直接。

策略模式的优势不知道大家发现了没有,我们通过这两天的例子可以发现,策略模式封装了算法,封装的这些算法都是完成功能相近的功能,只是实现不一样,减少了算法类和实现类之间的耦合性。

策略模式还有其他什么优点吗,大家可以想一想,其实这只是策略模式优势的一小部分。

相关文档