类别
创建型模式
1、创建型模式(Creational Pattern)关注对象的创建过程。
2、创建型模式对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离,对用户隐藏了类的实例的创建细节。
3、创建型模式描述如何将对象的创建和使用分离,从而降低了系统的耦合度,让设计方案更附和开放-封闭原则。
关注点:
我们的门卫思想,先得知道,创建型模式是什么?干什么?什么情况下要用?
创建什么(what)
由谁创建(who)
何时创建(when)
内容
简单工厂模式(SimpleFactory Pattern)
定义:
先定义一个工厂类,可以根据参数的不同返回不同的实例,被创建的实例通常都具有共同的父类。
优点:
在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。
缺点:
不符合开放——封闭原则(对每一次扩展的时候都要更改工厂类)
工厂方法模式(FactoryMethod Pattern)
定义:
定义一个用于创建对象的接口,但是让子类决定将哪一个类实例化。(这里的微妙之处,就是将类转换为接口,在复用的时候,不用知道接口的内部结构,自然也就符合对外的封闭。但是功能实现不会受到影响。)让一个类的实例化延迟到其子类。
优点:
在将对象的创建和使用分开的基础上,工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是会存在的,也就是说,工厂方法只是把简单工厂的内部逻辑判断转移到了客户端代码来进行,想要加功能,只需修改客户端代码。
抽象工厂模式(AbstractFactory)
定义:
提供一个创建一系列相关或相互依赖对象的接口,而无须制定它们具体的类。
优点:
1)易于交换产品系列,由于具体工厂类。例如:IFactoryfactory=new AccessFactory(),在一个应用中只需要在初始化的时候出现一次,这就使得改变一个具体的工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。
2)它让具体的创建实例过程与客户端分离,客户端是通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。
3)遵循的原则:依赖倒转原则,开放—封闭原则。
建造者模式(BuilderPattern)
定义:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
优点:
使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。
应用需求:主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。
原型模式(PrototypePattern)
定义:
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。(其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节)
单例模式(Singleton Pattern)
定义:
确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。(通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个,一个最好的方法就是,让类自身负责保存他的唯一实例,这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。)