A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小鲁哥哥 于 2017-12-14 16:07 编辑

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

上一篇里我们介绍了策略模式,最后留给大家一个问题,如何把策略模式和工厂模式结合起来去应用,不知大家有没有把这两个设计模式叠加起来应用,今天我给大家聊一聊我是如何应用的,这只是代表了个人观点,如果你有更好的方法,欢迎留言交流学习。
就像上一篇策略模式代码中所体现的那样,我们会发现我们的客户端还是比较臃肿,生成了很多Context的类,我们能不能把策略模式和工厂模式相结合呢,在桥梁类Context中去做判断和生成不同业务逻辑相对应的业务类呢?代码如下:
[Java] 纯文本查看 复制代码
/**
*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;
}
}
//上下文接口,根据具体的策略对象,调用其算法的方法,执行具体的逻辑方法
public void ContextInterface(){
stragerySuper.AlphInterfact();
}
}
[Java] 纯文本查看 复制代码
/**
 *客户端代码,通过Context中间类,来实现对具体实现类的调用
 **/
class Client{
Context context;
public void main(){
//在客户端,我们可以直接调用,而不用去全部生成判断了
Context con = new Context("A");
con.ContextInterface();
}
}
注:以上代码有一些是伪代码,所以大家在编译运行的时候要根据自己的实际情况进行修改,切勿直接粘贴复制!
这样客户端的代码是不是简洁了许多,我们把很多逻辑上的操作都封装在我们的Context类中,这样我们的客户端就看不到我们的逻辑实现,用户只需要传递他需要的类型,用户就能获取对应的结果值,对于用户来说简单直接。
策略模式的优势不知道大家发现了没有,我们通过这两天的例子可以发现,策略模式封装了算法,封装的这些算法都是完成功能相近的功能,只是实现不一样,减少了算法类和实现类之间的耦合性。
策略模式还有其他什么优点吗,大家可以想一想,其实这只是策略模式优势的一小部分。

如果你想了解更多黑马课程,如果你想加入黑马这个大家庭学习先进技术,光交天下好友,那就快来吧!
     黑马程序员济南中心联系电话:0531-55696830

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马