设计模式总结之创建型

来源:互联网 发布:发达国家的大数据战略 编辑:程序博客网 时间:2024/05/02 05:01

概述

设计模式中用于创建类的模式有以下几种:
单例,工厂方法,抽象工厂,建造者和原型

1.单例模式(Singleton)

常用指数:★★★★★

定义

保证一个类仅有一个实例,并提供一个访问他的全局访问点

使用方法:

//双重锁的形式public class SingletonClass{    private static SingletonClass instance=null;    public static SingletonClass getInstance()    {        if(instance==null)        {            synchronized(SingletonClass.class)            {                if(instance==null)                    instance=new SingletonClass();            }        }        return instance;    }    private SingletonClass(){    }}//静态调用public static class Singleton{    private static final Singleton instance = new Singleton();    private Singleton(){        //do something    }    public static Singleton getInstance(){        return instance;    }}

2.工厂方法(Factory Method)

常用指数:★★★★

定义

定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。

UML

这里写图片描述

优点

把对象的创建集中在一个地方(工厂中),在增加新的对象类型的时候,只需要增加新的工厂而无须改变已有代码;

例子

汽车工厂(Creator)–>大众汽车工厂,现代汽车工厂(ConcreteCreator)–>大众车,现代车

与单例模式的关系

一个具体的工厂通常是一个Singleton。

3.抽象工厂(Abstract Factory)

常用指数:★★★★

定义

提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。

UML

这里写图片描述

例子

这里写图片描述

优缺点

抽象工厂模式的优点
1分离接口和实现
  客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已。也就是说,客户端从具体的产品实现中解耦。

2使切换产品族变得容易
  因为一个具体的工厂实现代表的是一个产品族,比如上面例子的从现代汽车系列到大众汽车系列只需要切换一下具体工厂。

抽象工厂模式的缺点
1不太容易扩展新的产品
  如果需要给整个产品族添加一个新的产品,那么就需要修改抽象工厂,这样就会导致修改所有的工厂实现类。

与工厂模式的关系

Abstract Factory类通常用工厂方法(Factory Method)实现,

4.建造者模式(Builder)

常用指数:★★★

定义

将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。

UML

这里写图片描述
1 builder:为创建一个产品对象的各个部件指定抽象接口。
2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
3 Director:构造一个使用Builder接口的对象。
4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

例子

汽车制造(Director)–>汽车制造步骤(builder)–>跑车制造步骤(ConcreteBuilder):装引擎,车胎等–>成产出跑车(Product)

与抽象工厂区别

主要的区别是Builder模式着重于一步步构造一个复杂对象。而Abstract Factory着重于多个系列的产品对象(简单的或是复杂的)。

原型模式(Prototype)

常用指数:★★

定义

用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。

UML

这里写图片描述

例子

java里面的实现cloneable
春节祝福短信群发

0 0
原创粉丝点击