前言
前几天由学术组织的一次设计模式的交流会上让我对于设计模式之创建型又有了新的认识,尤其是米老师和雷哥对于设计模式的学习方法给了我很大的帮助,在学习一个设计模式的时候我们首先应该清楚设计模式的名字,类型,定义,然后适合的情况,然后就是就是小环境的研究比如代码上之类的。(引用雷哥的图)
内容:
一:创建型模式:
用来创建对象模式,抽象了实例化过程。
二:分类:
1.建造者模式(Buider pattern):将它的复杂对象的建构与它的表示分离,使得同样的构建过程可以创建不同表示。
优点:使用了建造者模式,那么用户只需要指定需要建造的类型就可以得到她们,而具体的建造过程和细节就不需要知道了。
适用的情况:同一个工艺流程,但是创造出不同的产品。(我自己的理解)就像是师姐在交流会上提出的对于我们学号的编排一样,学号中顺序是代表了年份,代表了学院信息等,每一个入学者都有一个自己独一无二的学号,所以按照这样的流程就有了很多的不同的学号。
uml结构图:
2.原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
优点:原型模式就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。
适用的情况:需要复制无数个相同的对象。
uml结构图:
3.工厂方法:(Factory Method pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
优点:工厂方法的优点是要和简单工厂做比较的,它集中封装了对象的创建,更换对象的时候不需要做大的改动就可以实现了降低了客户程序与产品对象的耦合。
适用的情况:对于存在多种类,然后所用的方法相同的情况。
uml结构图:
4.抽象工厂模式(Abstract factory Pattern):提供了一个创建一系列相关或依赖对象的接口,而无需制定他们具体的类。
优点:易于交换产品系列,改变了具体的工厂即可使用不同的产品配置。
适用情况:在工厂方法的基础上,对于相同的类又多了几种不同的选择。
uml结构图:
其中抽象工厂和工厂方法,还有简单工厂(不算一种设计模式),他们三者之间的复杂程度是逐步递减的。从简单工厂的图就可以看出;简单工厂类型最少,体现的知识面向对象的思想,其他几种模式都是以简单工厂为基础的。
5.单例模式(Singleton pattern):保证了一个仅有一个实例,并且提供了一个访问它的全局访问点。
优点:保证唯一的实例,严格控制客户的访问,提供唯一实例的受控访问。
适用情况:对于登陆等只需要一次出现的界面程序,通常使用单例模式。
uml结构图:
三:创建型模式之间的关系:
Singleton模式解决的是实体对象个数的问题。除了Singleton之外,其他创建型模式解决的都是new所带来的耦合关系。Factory Method,Abstract Factory,Builder都需要一个额外的工厂类来负责实例化“易变对象”,而Prototype则是通过原型(一个特殊的工厂类)来克隆“易变对象”。
如果遇到“易变类”,起初的设计通常从Factory Method开始,当遇到更多的复杂变化时,再考虑重构为其他三种工厂模式(Abstract Factory,Builder,Prototype)。
总结:
设计模式的学习远远没有结束,还在进行当中。最重要的就是在掌握了基本的理论之后去慢慢实践,才能够真正的理解设计模式的精妙之处!