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

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

 

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

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

如果保存全部信息,我们可以使用Clone实现,但如果只保存部分信息,就应该有一个独立的Memento备忘录类。

8、Observer 观察者

观察者模式也叫发布订阅模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生改变时,会通知所有观察者对象,是它们能够主动更新自己。这也是很常用的,像委托事件就是这种模式

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

核心是将所有通知者抽象类中用一个集合放所有观察者们。当通知者ConcreateSubject发起Notify通知时,逐个调用集合中观察者进行Update更新。

abstract class Subject
{
    private IList<Observer> observers = new List<Observer>();
    // 增加观察者
    public void Attach(Observer observer)
    
{
        observers.Add(observer);
    }
    // 移除观察者
    public void Detach(Observer observer)
    
{
        observers.Remove(observer);
    }
    // 通知
    public void Notify()
    
{
        foreach (Observer o in observers)
        {
            o.Update();
        }
    }
}

当一个对象的改变需要通知其他对象时使用,一般这种通知可能通过异步来处理。

9、State 状态

在状态模式中,类的行为时基于它的状态改变的。就是当一个对象的内部状态发生改变时改变它的行为。主要解决当控制一个对象状态转换的条件表达式过于复杂时,把判断的逻辑迁移到表示不同状态的一系列类中,达到给功能类瘦身的目的。

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

上面结构图中将状态单独从Context功能类中抽出来,先有一个抽象的状态类,然后具体不同的状态可以继承实现不同状态的Handle处理行为,最后把抽象状态聚合放到Context中去,最终调用Context的Request会根据不同的状态触发不同的Handle行为。

看下核心的代码。也可以在每一个状态子类Handle行为中设置Context的下一个状态,下次调用Request就触发相应的状态行为。

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

核心就是将状态和行为放入一个对象中。这么多种设计模式都有很多相像的地方,反正就是面向对象,分分合合,像前后端一样,各有优劣。这里就和命令模式处理的问题很像,都可以用作if分支语句的代替。通过状态模式可以很容易的增加新的状态,把状态行为封装起来,减轻了功能类。

10、Strategy 策略

策略模式定义一个类的行为算法可以在运行时更改, 把这些算法一个个封装起来,并使它们可以相互替换。

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

和前面状态模式结构图无差别,就是用策略代替了状态,描述不同的问题,解决方法一样。硬要找个不同,大概就是在Context中,状态模式调用时会传递本身引用到各个子状态的以实现状态的改变,策略模式中不需要传递,只在初始化时指定策略。

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

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

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