简单工厂 - 传字符串,运算工厂类中switch判断,如果增加运算符类,就要修改工厂类,增加期中的case分支。对扩展开放了,对修改也开放了;违背了 开放-封闭原则。
工厂方法 - 每种运算符对象,都对应一个工厂
反射+抽象工厂: 所有在用简单工厂的地方,都可以考虑用反射技术来去除switch或if,解除分支判断带来的耦合。
策略 - 传对象(共同实现了一个接口的不同对象),直接调用对象的方法(接口中的方法)
Flyweight: 设计模式 中的享元模式,避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类). 享元 =共享元类
所谓元类,在 Python(以及其它语言)中,类本身就是可以被传递和自省的对象。
既然可以用类作为模板来生成对象,那么用什么作为模板来生成类呢?答案是元类(metaclass)。
单例Singleton:
if (instance == null)
{
lock(syncRoot)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
当instance为null并且同时有两个线程调用GetInstance()方法时,它们将都可以通过第一重instance==null的判断。然后由于lock机制,这两个线程则只有一个进入,另一个在外排除等候,必须要其中的一个进入并出来后,另一个才有进入。而此时如果没有了第二重的instance是否为null的判断,则第一个线程创建了实例,而第二个线程还是可以继续再创建新的实例的,这就没有达到单例的目的。
Decorator装饰模式: 具体装饰类 -》继承装饰抽象类 -》继承要装饰的对象的抽象类。 三层次继承
UML类图:统一建模语言(UML:Unified Modeling Language)