用一个例子说明设计模式五种创建型模式!!!
这是我写设计模式的第二篇笔记随笔,第一篇笔记随笔链接:用现实生活中实例解释说明设计模式六大基本原则
后续会在这个例子上扩展,包含其余结构型模式和行为型模式,后续代码会上传GitHub。
更多操作创建型模式 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
工厂模式(Factory Pattern)
抽象工厂模式(Abstract Factory Pattern)
单例模式(Singleton Pattern)单例模式原理较为简单,不作阐述,例子中使用到了单例模式
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)
一辆汽车包含电气部分(Electical)发动机(Engine)和外壳(Shell);然后衍生出了电气部分工厂,发动机工厂和外壳工厂;宝马(BMW)部件生产工厂,奔驰(Benz)部件生产工厂等等……
以这个例子由简单到复杂讲解五种创建型模式
整体代码结构: UML图 UML简图 UML完整图 工厂模式 简单工厂模式简单工厂包含如下角色:
抽象产品 :定义了产品的规范,描述了产品的主要特性和功能。
具体产品 :实现或者继承抽象产品的子类
具体工厂 :提供了创建产品的方法,调用者通过该方法来获取产品。
抽象产品:
电气部分(Electical)
发动机(Engine)
外壳(Shell)
具体产品:
CarElectical
CarEngine
CarShell
具体工厂:
CarElecticalFactory
CarEngineFactory
CarShellFactory
优缺点优点:
封装了创建对象的过程,可以通过参数直接获取对象。把对象的创建和业务逻辑层分开,这样以后就避免了修改客户代码,如果要实现新产品直接修改工厂类,而不需要在原代码中修改,这样就降低了客户代码修改的可能性,更加容易扩展。
缺点:
增加新产品时还是需要修改工厂类的代码,违背了“开闭原则”。
工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪个产品类对象。工厂方法使一个产品类的实例化延迟到其工厂的子类。
工厂方法模式的主要角色:
抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品。
具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。
增加了抽象工厂MultiplePartsFactory:
优缺点优点:
用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;
在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;
缺点:
每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。
抽象工厂模式前面介绍的工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机;这些工厂只生产同种类产品,同种类产品称为同等级产品,也就是说:工厂方法模式只考虑生产同等级的产品,但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类) 的产品,如电器厂既生产电视机又生产洗衣机或空调,大学既有软件专业又有生物专业等。