设计模式程序员的的帮助是非常之大的,是编程的武器,是升职加薪的利器!对于 大多数人初学者,设计模式是个非常抽象的概念,在没有学习设计模式之前,认为代码无错便是优。但当你在程序员的这条路上越走越远时,你已经不知不觉得在实践设计模式了。设计模式向世人传达了一个信息:编程不仅仅是一门技术,更加是一门艺术!
设计模式可以分三个大类:创建型模式,结构性模式,行为型模式。
今天想给大家讲的是创建型模式,创建型模式隐藏了类的实例是如何被创建和放在一起的,整个系统关于这些对象所知道的是由抽象类所定义的接口。这样,创建模式在创建什么,谁创建它,它是怎么创建的,以及如何被创建这些方面提供了很大的灵活性。
实例简单的计算器讲述工厂模式
1.简单工厂模式 :运用简单工厂实例化出合适的对象,通过多态,返回父类的方式实现了计算器的结果。
OperationFactoty工厂类
<span style="font-size:12px;">public class OperationFactory(){ public static Operation createOperate(String operate){ Operation oper = null; switch(operate){ case "+": oper = new OperationAdd(); break; case "-": oper = new OperationSub(); break; case "*": oper = new OperationMul(); break; case "/": oper = new OperationDiv(); break; } } return oper }</span>
简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关类,对于客户端来说,去除了与具体产品的依赖。但问题在增加一个运算方法时,我们就需要在工厂类里加‘Case’的分支条件,修改原有的类,这等于说,我们不但对扩展开放了,对修改也开放了,违背了开放-封闭原则。因此有了工厂方法模式
2.工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到了其子类。
整个工厂和产品体系其实都没有修改的变化,而只是扩展的变化,这就完全符合了开放-封闭原则的精神。
工厂方法模式克服了简单工厂违背了开放-封闭原子的缺点,又保持了封装对象创建过程的优点。它们都集中封装了对象的创建,是得要更换对象时,不需要做大的改动就可以实现,降低了客户程序与产品对象的耦合。工厂方法模式是简单工厂模式的进一步抽象和推广。
由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。但缺点是由于每加一个产品,就需要加一个产品工厂类,增加了额外的开发量。
注意:通常设计是由工厂方法开始的,当设计者发现需要更大的灵活性时,设计便会想起他创建型模式演化。当设计者在设计标准之间进行权衡的时候,了解多个创建型模式可以给设计者更多的选择余地。
3.抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类
在项目开发中,反复套用的技巧司空见惯,但数据库的选择往往是由开发者决定的,但不排除客户指定数据库的需求。此时数据库的麻烦就来了,就拿Sql Server,Acess来说,两者还是有一定的区别的,连接语句、关键字的限定等等,那如何做到增加需求,修改程序,而不影响他们的链接呢,不要想着时间问题反复的copy等想法,那只会增大工作量!而这就是设计模式提倡的优雅的编程!
工厂方法实现user 表的操作
但数据库不可能只有一张表,再加一张部门表。
在不知不觉中,你已经通过不断地演化。重构出了抽象方法模式。当只有一个User类和User操作类的时候,时只需要工厂方法模式的,但现在显然数据库中有很多的表,而Sql Server 和Access 又是两大不同的分类,所以解决这种涉及到多个产品系列的问题,有个专门的工厂模式叫抽象工厂模式。
当然各种模式单一使用是比较无力的,可以一起使用,实现编程的艺术。这里就不多说了~~~。
4.原型模式:用原型实例指定创建的对象的种类,并通过拷贝这些原型穿件新的对象
原型模式其实就是从一个对象再创建另一个可定制的对象,而不需要知道任何创建的细节。
建立相应数目的原型并克隆它们通常比每次用合适的状态手工实例化该类更方便些。
5.单例模式:简洁得美,保证一个类仅有一个实例。并提供一个访问它的全局访问点。
通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。
6.建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
在谈建造者模式之前先来谈谈内聚性和耦合性:内聚性描述的是一个例程内部组成部分之间相互联系的紧密程度。二耦合性描述的是一个例程与其他例程之间联系的紧密程度。软件开发的目标应该是创建这样的例程:内部完整,也就是高内聚,而与其他例程之间的联系则是小巧、直接、可见、灵活的,这就是松耦合。
建造者模式将一个复杂对象与他的表示分离。这就可以很容易地改变产品的内部表示,并且使得构造代码和表示代码分开。这样对于客户来说,它无需关心产品的创建过程,而只要告诉我们需要什么,我们就能用同样的构建过程创建不同的产品给客户。
创建一些复杂的对象,这些对象内部构建顺序通常稳定的,但对象内部的构建通常面临着复杂的变化。
意义:创建型模式抽象了实例化的过程。他们帮助一个系统独立于如何被创建,组合和表示它的那些对象。创建型模式都会将关于该系统使用哪些具体的类的信息封装起来。允许 客户用结构和功能差别很大的“产品”对象配置一个系统。配置可以是静态的,即在编译时指定,也可以是动态的,就是在运行时指定。
单纯的记录所学,如有问题可参考各种设计模式书籍~~~~