设计模式:单例模式,工厂模式

什么是设计模式?编程

设计模式(Design Patterns)表明了最佳的实践,一般被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程当中面临的通常问题的解决方案。设计模式

设计模式分类:(3大类,23种)安全

建立型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式。线程

结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。设计

行为型模式:模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、责任链模式。代理

一,单例模式:


采起方法,使整个软件系统中,对某个类只存在一个对象实例。而且该类只提供一个取得其对象实例的方法(静态方法)。code

实现的类型:对象

1)饿汉模式:接口

饿汉模式就是当类加载时就建立该类的实例,这是建立单例类最容易的方法可是有个一弊端是建立了该实例可是客户端程序可能不使用这个实例。开发

2)静态初始化:

静块初始化实现相似于饿汉模式初始化,但类的实例在静态代码块中建立并对异常进行处理。

3)懒加载:

懒加载就是当须要的时候再来建立该类的实例,而不是一开始就把实例建立好了。

4)线程安全的单例:

public class ThreadSafeSingleton {
    private static ThreadSafeSingleton instance = null;

    private ThreadSafeSingleton(){

    }

    //同步关键字synchronized
    public static synchronized ThreadSafeSingleton getInstance(){
        if(instance == null){
            instance = new ThreadSafeSingleton();
        }
        return  instance;
    }

}

5)枚举单例

这种方法简单,便捷。

public enum  EnumSingleton {
    INSTANCE;

    public static void doSomething(){
        //do something
    }
}

特色:

1)单例类只能有一个实例。

2)单例类必须本身建立本身的惟一实例。

3)单例类必须给全部其余对象提供这一实例。

二,工厂模式:


工厂模式包括:

1)简单工厂模式

又称为静态工厂方法模式,它属于类建立型模式。在简单工厂模式中,能够根据参数的不一样返回不一样类的实例。简单工厂模式专门定义一个类来负责建立其余类的实例,被建立的实例一般都具备共同的父类。

  • 将建立实例的工做与使用实例的工做分开,使用者没必要关心类对象如何建立,实现了解耦;
  • 把初始化实例时的工做放到工厂里进行,使代码更容易维护。 更符合面向对象的原则 & 面向接口编程,而不是面向实现编程。

2)工厂方法模式

工厂方法是针对每一种产品提供一个工厂类,经过不一样的工厂实例来建立不一样的产品实例。主要解决了简单工厂模式违背了“开放 - 关闭原则”的问题。

优势:

  • 更符合开-闭原则,新增一种产品时,只须要增长相应的具体产品类和相应的工厂子类便可
  • 符合单一职责原则,每一个具体工厂类只负责建立对应的产品

3)抽象工厂模式

抽象工厂模式容许使用抽象的接口来建立一组相关产品,而不须要知道或关心实际生产出的具体产品是什么,这样就能够从具体产品中被解耦。

优势:

  • 下降耦合。抽象工厂模式将具体产品的建立延迟到具体工厂的子类中,这样将对象的建立封装起来,能够减小客户端与具体产品类之间的依赖,从而使系统耦合度低,这样更有利于后期的维护和扩展;

  • 更符合开-闭原则。新增一种产品类时,只须要增长相应的具体产品类和相应的工厂子类便可。

设计模式六大原则:

  • 单一职责原则:

    单一职责原则表示一个模块的组成元素之间的功能相关性。通俗地说,一个类只负责一项职责。

    目的:

    1)下降类的复杂度

    2)提升系统的可维护性

    3)修改时下降风险溢出

  • 里氏替换原则:

    全部引用基类的地方必须能透明地使用其子类对象,子类在扩展父类功能时不能破坏父类原有的功能。

  • 接口隔离原则:

    一个类对另外一个类的依赖应该创建在最小的接口上。

  • 依赖倒置原则:

    依赖:成员变量、方法参数、返回值要依赖于抽象,不要依赖于具体。高层模块不该该依赖低层模块,两者都应该依赖于其抽象。

  • 迪米特原则:

    一个对象应该与其余对象保持最少的了解。

  • 开闭原则:

    对扩展开放,对修改关闭,经过扩展已有软件系统,能够提供新的功能,修改的关闭,保证稳定性和延续性。

相关文章
相关标签/搜索