黑马程序员技术交流社区
标题: 【黑马程序员济南】浅谈设计模式-策略设计模式 [打印本页]
作者: 小鲁哥哥 时间: 2017-12-7 15:10
标题: 【黑马程序员济南】浅谈设计模式-策略设计模式
本帖最后由 小鲁哥哥 于 2017-12-7 15:11 编辑
【黑马程序员济南】策略设计模式
上一次我们聊了简单工厂模式,让大家了解到了如何使程序具备更高的解耦性,使每一个功能代码都独立出来,今天我们和大家聊一下另一种解耦的设计模式,它就是策略设计模式。
什么是策略设计模式:它定义了算法家族,分别封装起来,让他们之间可以项目替换,此模式让算法的变化,不会影响到算法的客户。我们可以这样理解,工厂模式是让我们内部的构造变得高内聚低耦合,而策略模式是让我们的内部代码和外部客户端代码不直接进行联系,而是通过一个桥梁来进行沟通,并且使相同算法或功能的代码进行封装。给大家用UML图进行展示一下:
大家通过上方的UML图可以看出,策略设计模式的思想为封装算法类,通过一个上下文的类,来沟通客户端和服务器端的逻辑代码。给大家代码演示一下:
[Java] 纯文本查看 复制代码
/**
* 此类为抽象的基类,用于具体的代码来继承使用
* @author zhe
*
*/
public abstract class StragerySuper {
//算法方法,用于具体的逻辑算法来实现
public abstract void AlphInterfact();
}
具体的实现代码类:
[Java] 纯文本查看 复制代码
/**
*具体的算法实现代码A
*
**/
class ConcreteA extends StragerySuper{
@Override
public void AlphInterfact() {
System.out.print("算法A的实现类");
}
}
[Java] 纯文本查看 复制代码
/**
*具体的算法实现代码B
*
**/
class ConcreteB extends StragerySuper{
@Override
public void AlphInterfact() {
System.out.print("算法B的实现类");
}
}
[Java] 纯文本查看 复制代码
/**
*具体的算法实现代码C
*
**/
class ConcreteC extends StragerySuper{
@Override
public void AlphInterfact() {
System.out.print("算法c的实现类");
}
}
上下文类,作为连接客户端和后台代码端的桥梁
[Java] 纯文本查看 复制代码
/**
*Context类,用于和外界进行联系的类,用来对StrategySuper的引用
***/
class Context{
StragerySuper stragerySuper;
public Context(StragerySuper stragerySuper){
//初始化构造函数,传递具体的策略对象
this.stragerySuper = stragerySuper;
}
//上下文接口,根据具体的策略对象,调用其算法的方法,执行具体的逻辑方法
public void ContextInterface(){
stragerySuper.AlphInterfact();
}
}
客户端代码:
[Java] 纯文本查看 复制代码
/**
*客户端代码,通过Context中间类,来实现对具体实现类的调用
**/
class Client{
Context context;
public void main(){
//客户端通过context执行具体的逻辑代码
context = new Context(new ConcreteA());
context.ContextInterface();
context = new Context(new ConcreteB());
context.ContextInterface();
context = new Context(new ConcreteC());
context.ContextInterface();
}
}
注:以上代码有一些是伪代码,所以大家在编译运行的时候要根据自己的实际情况进行修改,切勿直接粘贴复制!
大家看策略模式是不是和简单工厂模式有点雷同,下一次我们把两个设计模式结合起来去实现,大家会发现我们的代码会更简洁和高效,每一种设计模式不是独立,他们都是可以交叉使用的。我们只有不断的在我们的代码中去应用到这些设计模式,那么我们的编程思想会越来越灵活。
如果你想了解更多黑马课程,如果你想加入黑马这个大家庭学习先进技术,光交天下好友,那就快来吧!
黑马程序员济南中心联系电话:0531-55696830
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |