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

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

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

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

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

class Context{

StragerySuperstragerySuper = null; public Context(String type){

//初始化时传递类型,直接在Context类中生成相对应的实现类 switch(type){ case\:

stragerySuper = newConcreteA(); break;

case\:

stragerySuper = newConcreteB(); break;

黑马程序员济南中心 编著

} /**

}

case\: }

stragerySuper = newConcreteC(); break;

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

stragerySuper.AlphInterfact();

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

Context context; publicvoid main(){ }

黑马程序员济南中心 编著

//在客户端,我们可以直接调用,而不用去全部生成判断了 Context con = newContext(\); con.ContextInterface();

}

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

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

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

黑马程序员济南中心 编著

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4