设计模式之创建型模式
Posted wanghp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之创建型模式相关的知识,希望对你有一定的参考价值。
好长时间没有写博客了,今天看了创建型设计模式,做个简单的总结
创建型模式
这种类型的设计模式提供了一种在创建对象的同时隐藏创建逻辑。包含工厂模式(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() {
}
}
以上是关于设计模式之创建型模式的主要内容,如果未能解决你的问题,请参考以下文章