《大话设计模式》读书笔记(七)

写在前面

本文上接《大话设计模式》读书笔记(六),这次来学习单例模式、桥接模式、命令模式。

14.单例模式(Singleton Pattern)

解决的问题

单例模式可以创建一个类的全局唯一的实例,使得资源得到节约。

类图结构

image-20201228221905595

这个类图很简单,只有一个Singleton类:

class Singleton{
    private static Singleton instance;
    
    private Singleton(){
        
    }
    public static Singleton GetInstance(){
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }
}

好处与坏处

单例模式的好处十分明显,单例模式可以严格的控制唯一实例的受控访问。但缺点在于不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。

15.桥接模式(Bridge Pattern)

解决的问题

可以把抽象和实现分离,桥接模式解决的是类属性多维度变化问题,把类的抽象层次结构和类的实现层级结构解耦。

类图结构

image-20201228223033481

这个类图看着还是比较复杂的,首先是一个Abstraction类,代表抽象,Implementor代表实现类,RefinedAbstraction代表被提炼的抽象,ConcreteImplementorA和B代表两个具体的实现。

Implementor类:

abstract class Implementor{
    public abstract void Operation()
}

ConcreteImplementorA 和 ConcreteImplementorB类:

class ConcreateImplementorA : Implementor{
    public override void Operation(){
        Console.WriteLine("具体实现A的方法执行");
    }
}
class ConcreateImplementorB : Implementor{
    public override void Operation(){
        Console.WriteLine("具体实现B的方法执行");
    }
}

Abstract类:

class Abstraction{
    protected Implementor implementor;
    public void SetImplementor(Implementor implementor){
        this.implementor = implementor;
    }
    public virtual void Operation(){
        implementor.Operation();
    }
}

RefinedAbstraction类:

class RefinedAbstraction : Abstraction{
    public override void Operation(){
        implementor.Operation();
    }
}

好处与坏处

桥接模式的好处,就在于能够把这种多维度的变化分离出来独立变化,减少他们的耦合。但缺点是会使得系统变得很复杂,更加难以维护。

16.命令模式(Command Pattern)

解决的问题

命令模式,将一个请求封装成一个对象,可以降低耦合度,更加容易扩展。适用于发起的命令比较复杂的情况。

类图结构

image-20201228224918207

好处与坏处

  • 降低耦合度.

  • 新增一个命令/一组命令简单.

  • 调用同一方法实现不同功能.

    坏处:

    会产生过多具体命令类.

总结

这次学习了三个模式

posted @ 2020-12-28 23:00  武神酱丶  阅读(67)  评论(0编辑  收藏  举报