单例模式
什么是单例模式?
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例
一、实例控制
单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
二、灵活性
因为类控制了实例化过程,所以类可以灵活更改实例化过程。
一、开销
虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。
二、可能的开发混淆
使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。
三、对象生存期
不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于.NET Framework的语言),只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如 C++),其他类可以删除对象实例,但这样会导致单例类中出现悬浮引用。
常用形式:
第一种形式:懒汉式,也是常用的形式。
第二种形式:饿汉式
第三种形式: 双重锁的形式。
简单工厂模式
什么是简单工厂模式?
简单点说呢,就是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
简单工厂模式的优缺点分析?
优点:
有利于整个原件体系的优化
缺点:
违反高聚合的分配原则
不利于对系统的维护和扩展;
使用场景?
工厂类负责创建的对象比较少;
客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;
由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。
策略模式
什么是策略模式?
策略模式是指有一定行动内容的相对稳定的策略名称。
优点:
1. 避免代码重复。
2. 策略模式提供了可以替换继承关系的办法
3. 可以避免使用多重条件转移语句
缺点:
1. 策略模式只适用于客户端知道所有的算法或行为的情况
2. 可以使用享元模式来减少对象的数量
使用场景?
1. 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
2. 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。
3. 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。