创建类模式包括工厂方法模式、创建者模式、抽象工厂模式、单例模式和原型模式,他们能够提供对象的创建和管理职责。
创建型模式,就是用来创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。
为什么需要创建型模式
所有的创建型模式都有两个永恒的主旋律:第一,它们都将系统使用哪些具体类的信息封装起来;第二,它们隐藏了这些类的实例是如何被创建和组织的。外界对于这些对象只知道它们共同的接口,而不清楚其具体的实现细节。正因如此,创建型模式在创建什么(what),由谁(who)来创建,以及何时(when)创建这些方面,都为软件设计者提供了尽可能大的灵活性
常见的五种创建型模式
单件模式(Singleton Pattern)解决的是实体对象的个数问题,其他的都是解决new所带来的耦合关系问题。
工厂方法模式(Factory Pattern)在工厂方法中,工厂类成为了抽象类,其实际的创建工作将由其具体子类来完成。工厂方法的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中去,强调的是“单个对象”的变化。
抽象工厂模式(Abstract Factory)抽象工厂是所有工厂模式中最为抽象和最具有一般性的一种形态。抽象工厂可以向客户提供一个接口,使得客户可以在不必指定产品的具体类型的情况下,创建多个产品族中的产品对象,强调的是“系列对象”的变化。
创建者模式(Builder Pattern)把构造对象实例的逻辑移到了类的外部,在这个类的外部定义了这个类的构造逻辑。他把一个复杂对象的构造过程从对象的表示中分离出来。其直接效果是将一个复杂的对象简化为一个比较简单的目标对象。他强调的是产品的构造过程。
原型模式(Prototype Pattern)和工厂模式一样,同样对客户隐藏了对象创建工作,但是,与通过对一个类进行实例化来构造新对象不同的是,原型模式是通过拷贝一个现有对象生成新对象的。
1、工厂方法模式VS建造者模式
工厂方法模式注重的是整体对象的创建方法,而建造者模式注重的是部件构建的过程,旨在强调一步一步的创建出对象的这个过程。
用制造超人举例子来说明这两个模式的区别:用工厂方法模式直接生产一个超人,出来就是力大无穷、能够飞翔、内裤外穿的超人,而是用建造者模式,需要组装手、头脚等躯干,然后再把内裤外穿,然后再给其赋予各种超能力,很明显,如果这个超人单一,那么工厂方法模式适用,但是如果有各种各样的超人,组装的次序不一样,就会有很多品种,用建造者模式可以令物种多样化。
先来看看用工厂方法模式设计的UML图:
再来看看用建造者模式设计的UML图:
总结下两个模式的区别:建造者必须关注超人的各个部件,而工厂方法模式则只关注超人的整体
2、抽象工厂模式VS建造者模式
抽象工厂模式:不关心构建过程,只关心什么产品由什么工厂生产即可
建造者模式:要求按照指定的蓝图建造产品,它的主要目的是通过组装零件而产生一个新产品
举例子来说明两者的不同:现代化的汽车工厂能够批量声场汽车,不同的工厂声场不同的汽车,宝马汽车生产宝马牌子的车,奔驰生产奔驰牌子的车。车不仅具有不同的品牌,还有不同的用途分类,如商务车Van,运动型车SUV等
先来看看用抽象工厂模式来设计的实现方式:
再来看按照建造者模式来设计,建造者模式设计一个生产车辆需要把车辆进行拆分,拆分成引擎和车轮两部分,然后又建造者进行建造,想要什么车,你只要有设计图纸就成,马上就可以建造一辆车出来。具体的UML图如下