帮你整理了一份设计模式速查手册 (7)

看上面代码,估计大都用过,设计模式好多都是这种普普通通,数据库连接池就是使用享元模式。总结下就是在系统中有大量相似对象或者需要缓冲池的场景,相似对象可以分离出内部和外部状态,内部状态就是固有的,不变的。外部状态可以通过外部调用传递进去。

6、Proxy 代理

像代购一样,我们拜托他人帮我们买某个东西。代理模式就是用一个类代表另一个类的功能。通常在不方便直接访问原始对象功能,或者需要对原始对象功能增加一些权限或其他控制时使用代理模式。

帮你整理了一份设计模式速查手册

 核心就是增加代理层,让代理类和真实类都实现相同的接口(或抽象类),然后把真实类关联到代理类中。

上述结构图中的核心代码如下

class Proxy : Subject
{
    RealSubject realSubject;
    public override void Request()
    
{
        if (realSubject == null)
        {
            realSubject = new RealSubject();
        }
        realSubject.Request();
    }
}

代理模式其实就是在访问对象时引入一定程度的间接性,因此可以附加多种用途。

7、Facade外观

外观模式隐藏系统的复杂性,向客户端提供一个高层访问系统接口。这样降低访问复杂系统的内部子系统时的复杂度,简化客户端交互,就像公司前台。

帮你整理了一份设计模式速查手册

 

 核心就是将复杂系统里的类关联到外观类上。上面结构图就很清晰,通过外观类方法调用各个复杂系统类。

帮你整理了一份设计模式速查手册

这种方式对老系统尤其有用,新增功能需要用到旧类,如果怕改坏了,就可以简单实用外观封装。还有就是设计时经典的三层架构也是外观的体现。

行为型

行为型设计模式关注对象和行为的分离。行为型比较多,因为程序逻辑都需要行为来触发。

1、Interpreter 解释器

解释器模式,给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。有点拗口,简单理解就是对于一些固定文法构建一个解释句子的解释器。像正则表达式就是这样,查询匹配字符问题发生的频率很高,就把该问题各个实例表述为一个简单语言中的句子,解释句子来解决问题。比例谍战片中的加密电报,构建一个解释器对每个文法解析。

帮你整理了一份设计模式速查手册

核心就是构建语法数,定义终结符与非终结符。实际利用的场景还是比较少的,而且文法太复杂也很难维护。
实际客户端调用时像下面这样遍历解释器文法

Context context = new Context();
List<AbstractExpression> list = new ArrayList<>();

list.Add(new TerminalExpression());
list.Add(new NonterminalExpression());
list.Add(new TerminalExpression());
list.Add(new TerminalExpression());
foreach (AbstractExpression abstractExpression in list)
{
    abstractExpression.Interpret(context);
}
2、Template Method 模板方法

在模板方法中,一个抽象类公开定义一个算法的执行方式模板,而将一些步骤延迟到子类中,子类可以按需要重写方法实现,但调用统一使用抽象类中定义的方式调用。

帮你整理了一份设计模式速查手册

上面结构图中AbstractClass就是一个抽象类(抽象模板),定义并实现了一个模板方法。像下面这样

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdydg.html