• 设计模式之操作型模式


    操作型模式包含了:模板方法模式、状态模式、策略模式、命令模式和解释器模式。

    1、模板方法模式(Template Method)

           一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。

           优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。

           缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

           实现过程:

           第一步:创建模板抽象类

           

           第二步:创建继承模板类的实体类,并实现模板自定义的部分

           

           

           最后:通过模板实现调用

           

           输出:

     

    2、状态模式(State Pattern)

           对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。

           优点:1、将状态判断逻辑每个状态类里面,可以简化判断的逻辑。2、当有新的状态出现时,可以通过添加新的状态类来进行扩展,扩展性好。

           缺点:如果状态过多的话,会导致有非常多的状态类,加大了开销。

           举个例子:信用卡的使用状态,当你的额度一点都没有用或者还有三分之二没有用,基本这个时候你不会受到信用卡的临时提额短信的,当信用卡的额度只剩下三分之一,这个时候说明你的开支很大了,提醒一下你临时提额吧。当你的信用卡用爆了之后,嗯,抱歉,不能再刷卡咯

           第一步:创建状态抽象类

           

           第二步:创建信用卡用户实体类

           

           第三步:创建状态实体类

            

            

            

            最后:

           

           输出:

           

    3、策略模式(Strategy Pattern)

           三十六计,每一种计谋都是一种策略。旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。所以把它们一个个封装起来, 并且使它们可相互替换。

           优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。

           缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。 

           举个栗子:计税计算器

           第一步:创建策略接口或者抽象类都行

           

           第二步:创建多种计税方式类实现策略接口

           

           

           第三步:创建一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

           

           最后:

           

           输出:

           

    4、命令模式(Command Pattern)

           请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。

           优点: 1、降低了系统耦合度。 2、新的命令可以很容易添加到系统中去。

           缺点:使用命令模式可能会导致某些系统有过多的具体命令类。

           代码实现:

           第一步:创建接收者类

           

           第二步:创建命令抽象类

           

           第三步:创建命令实体类

           

           第四步:创建一个下命令的人

           

           最后:

           

           输出:

           

    5、解释器模式(Interpreter Pattern)

           实现了一个表达式接口,该接口解释一个特定的上下文。就是说给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。这种模式被用在 SQL 解析、符号处理引擎等。

           优点: 1、可扩展性比较好,灵活。 2、增加了新的解释表达式的方式。 3、易于实现简单文法。

           缺点: 1、可利用场景比较少。 2、对于复杂的文法比较难维护。 3、解释器模式会引起类膨胀。 4、解释器模式采用递归调用方法。

           使用场景: 1、可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。 2、一些重复出现的问题可以用一种简单的语言来进行表达。 3、一个简单语法需要解释的场景。

           举个栗子:

           第一步:创建一个解释器抽象类或者接口

           

           第二步:创建解释器实体类

           

           

           

           最后:实现调用

           

           输出:

           

           解释器的使用场景较少,也比较少用。

  • 相关阅读:
    JavaScript 深入之从原型到原型链(转载)
    Javascript 异步加载详解(转载)
    JavaScript 运行机制(转载)
    js学习总结----数据类型检测的四种方式(转载)
    GitHub常用指令
    项目部署到linux云服务器最简单的方式
    把MongoDB写成服务
    浏览器中的事件循环
    使用Nodejs计算文件夹中所有文件的大小
    前端web模块化开发之ESModules
  • 原文地址:https://www.cnblogs.com/Vam8023/p/8470618.html
Copyright © 2020-2023  润新知