设计模式之创建型模式

好长时间没有写博客了,今天看了创建型设计模式,做个简单的总结

  创建型模式

    这种类型的设计模式提供了一种在创建对象的同时隐藏创建逻辑。包含工厂模式(Factory Pattern)抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)

  工厂模式(Factory Pattern)

  • 应用实例:您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。
  • 解释:工厂模式相对比较简单,我们首先创建它的接口Shape 以及实现类,然后在创建工厂类,在Demo中通过不同的类型通过工厂获取不同的对象

抽象工厂模式(Factory Pattern)

  应用实例:工作了,为了参加一些聚会,肯定有两套或多套衣服吧,比如说有商务装(成套,一系列具体产品)、时尚装(成套,一系列具体产品),甚至对于一个家庭来说,可能有商务女装、商务男装、时尚女装、时尚男装,这些也都是成套的,即一系列具体产品。假设一种情况,在您的家中,某一个衣柜(具体工厂)只能存放某一种这样的衣服(成套,一系列具体产品),每次拿这种成套的衣服时也自然要从这个衣柜中取出了。用 OO 的思想去理解,所有的衣柜(具体工厂)都是衣柜类的(抽象工厂)某一个,而每一件成套的衣服又包括具体的上衣(某一具体产品),裤子(某一具体产品),这些具体的上衣其实也都是上衣(抽象产品),具体的裤子也都是裤子(另一个抽象产品)。

  

    解释:在Demo类中,先创建工厂创造器获取工厂,通过创建抽象类获取工厂。最后通过具体的工厂类获取对象的实现。

  单例模式

    应用实例:单例模式的例子实现太多就不列举具体那里使用了,说说对单例的理解,首先单例类只有一个实例,单例类必须自己创建自己的实例,单例类必须给其他对象提供这一实例。

  单例模式的几种实现方式

    1.懒汉式,线程不安全  

public class Singleton {  
    private static Singleton instance;  
    private Singleton (){}  
  
    public static Singleton getInstance() {  
    if (instance == null) {  
        instance = new Singleton();  
    }  
    return instance;  
    }  
}
  2.懒汉式,线程安全
public class Singleton {  
    private static Singleton instance;  
    private Singleton (){}  
    public static synchronized Singleton getInstance() {  
    if (instance == null) {  
        instance = new Singleton();  
    }  
    return instance;  
    }  
}//这里备注下,这种加锁的方式影响效率,适用于对getInstance使用不太频繁的场景中
  3.饿汉式,线程安全
public class Singleton {  
    private static Singleton instance = new Singleton();  
    private Singleton (){}  
    public static Singleton getInstance() {  
    return instance;  
    }  
}
  4.双检锁/双重检验锁 JDK 1.5以上
  
public class Singleton {  
    private volatile static Singleton singleton;  
    private Singleton (){}  
    public static Singleton getSingleton() {  
    if (singleton == null) {  
        synchronized (Singleton.class) {  
        if (singleton == null) {  
            singleton = new Singleton();  
        }  
        }  
    }  
    return singleton;  
    }  
}

  5.登记式、静态内部类
public class Singleton {  
    private static class SingletonHolder {  
    private static final Singleton INSTANCE = new Singleton();  
    }  
    private Singleton (){}  
    public static final Singleton getInstance() {  
    return SingletonHolder.INSTANCE;  
    }  
}

  6.枚举 JDK 1.5以上
  
public enum Singleton {  
    INSTANCE;  
    public void whateverMethod() {  
    }  
}
 

 

posted @ 2018-06-19 11:57  飞鱼在天  阅读(126)  评论(0编辑  收藏  举报