写在前面
本文上接《大话设计模式》读书笔记(六),这次来学习单例模式、桥接模式、命令模式。
14.单例模式(Singleton Pattern)
解决的问题
单例模式可以创建一个类的全局唯一的实例,使得资源得到节约。
类图结构
这个类图很简单,只有一个Singleton类:
class Singleton{
private static Singleton instance;
private Singleton(){
}
public static Singleton GetInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
好处与坏处
单例模式的好处十分明显,单例模式可以严格的控制唯一实例的受控访问。但缺点在于不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。
15.桥接模式(Bridge Pattern)
解决的问题
可以把抽象和实现分离,桥接模式解决的是类属性多维度变化问题,把类的抽象层次结构和类的实现层级结构解耦。
类图结构
这个类图看着还是比较复杂的,首先是一个Abstraction
类,代表抽象,Implementor
代表实现类,RefinedAbstraction
代表被提炼的抽象,ConcreteImplementor
A和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)
解决的问题
命令模式,将一个请求封装成一个对象,可以降低耦合度,更加容易扩展。适用于发起的命令比较复杂的情况。
类图结构
好处与坏处
-
降低耦合度.
-
新增一个命令/一组命令简单.
-
调用同一方法实现不同功能.
坏处:
会产生过多具体命令类.
总结
这次学习了三个模式