【黑马程序员济南】策略设计模式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类中,这样我们的客户端就看不到我们的逻辑实现,用户只需要传递他需要的类型,用户就能获取对应的结果值,对于用户来说简单直接。
策略模式的优势不知道大家发现了没有,我们通过这两天的例子可以发现,策略模式封装了算法,封装的这些算法都是完成功能相近的功能,只是实现不一样,减少了算法类和实现类之间的耦合性。
策略模式还有其他什么优点吗,大家可以想一想,其实这只是策略模式优势的一小部分。
黑马程序员济南中心 编著