大话设计之模式总结——创建型模式

设计模式程序员的的帮助是非常之大的,是编程的武器,是升职加薪的利器!对于 大多数人初学者,设计模式是个非常抽象的概念,在没有学习设计模式之前,认为代码无错便是优。但当你在程序员的这条路上越走越远时,你已经不知不觉得在实践设计模式了。设计模式向世人传达了一个信息:编程不仅仅是一门技术,更加是一门艺术!

设计模式可以分三个大类:创建型模式,结构性模式,行为型模式。

今天想给大家讲的是创建型模式,创建型模式隐藏了类的实例是如何被创建和放在一起的,整个系统关于这些对象所知道的是由抽象类所定义的接口。这样,创建模式在创建什么,谁创建它,它是怎么创建的,以及如何被创建这些方面提供了很大的灵活性。

实例简单的计算器讲述工厂模式

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.建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

在谈建造者模式之前先来谈谈内聚性和耦合性:内聚性描述的是一个例程内部组成部分之间相互联系的紧密程度。二耦合性描述的是一个例程与其他例程之间联系的紧密程度。软件开发的目标应该是创建这样的例程:内部完整,也就是高内聚,而与其他例程之间的联系则是小巧、直接、可见、灵活的,这就是松耦合。

建造者模式将一个复杂对象与他的表示分离。这就可以很容易地改变产品的内部表示,并且使得构造代码和表示代码分开。这样对于客户来说,它无需关心产品的创建过程,而只要告诉我们需要什么,我们就能用同样的构建过程创建不同的产品给客户。

创建一些复杂的对象,这些对象内部构建顺序通常稳定的,但对象内部的构建通常面临着复杂的变化。

意义:创建型模式抽象了实例化的过程。他们帮助一个系统独立于如何被创建,组合和表示它的那些对象。创建型模式都会将关于该系统使用哪些具体的类的信息封装起来。允许 客户用结构和功能差别很大的“产品”对象配置一个系统。配置可以是静态的,即在编译时指定,也可以是动态的,就是在运行时指定。

单纯的记录所学,如有问题可参考各种设计模式书籍~~~~

时间: 2024-10-02 08:00:50

大话设计之模式总结——创建型模式的相关文章

设计模式05: Prototype 原型模式(创建型模式)

Prototype 原型模式(创建型模式) 依赖关系的倒置抽象不应该依赖于实现细节,细节应该依赖于抽象.对所有的设计模式都是这样的. -抽象A直接依赖于实现细节b -抽象A依赖于抽象B,实现细节b依赖于抽象B 动机(Motivation) 在软件工程中,经常面临着“某些结构复杂的对象”的创建工作:由于需求变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口. 如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出这些“易变对象”,从而使得“依赖这些易变对象的客户程序”不

设计模式03: Builder 生成器模式(创建型模式)

Builder生成器模式(创建型模式) Builder模式缘起假设创建游戏中的一个房屋House设施,该房屋的构建由几个部分组成,且各个部分富于变化.如果使用最直观的设计方法,每个房屋部分的变化,都将导致房屋构建的重新修正... 动机(Motivation)在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将他们组合在一起的算法却非常稳定.如何应对这种变化?如何提供一种“封装机制”来隔离

设计模式-04 建造者模式(创建型模式)

一 建造者模式 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 主要解决:在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定. 关键代码 : 建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系. 使用场景: 汽车有很多部件,车轮

设计模式04: Factory Methord 工厂方法模式(创建型模式)

Factory Methord 工厂方法模式(创建型模式) 从耦合关系谈起耦合关系直接决定着软件面对变化时的行为 -模块与模块之间的紧耦合使得软件面对变化时,相关的模块都要随之变更 -模块与模块之间的松耦合使得软件面对变化时,一些模块更容易被替换或者更改,但其他模块保持不变 对代码的关注要在理解了设计模式之后,对于不同的代码但是解决的是同一类问题,他们就是同一种设计模式.解决了哪一类的问题就是哪一类的设计模式. 软件需求的变化是软件工程的一部分,是我们要解决的问题. 把模块分为主模块.次模块主模

设计模式-05 原型模式(创建型模式)

一 原型模式 原型模式是用于创建重复的对象,同时又能保证性能. 原型模式用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 主要解决: 利用已有的一个原型对象,快速地生成和原型对象一样的实例 关键代码 : 实现克隆操作,在 JAVA 继承 Cloneable,重写 clone() 使用场景: 类初始化需要消化非常多的资源,这个资源包括数据.硬件资源等. 类图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype.Prototype类需要具备以下两个条件: 实现

《大话设计模式》笔记(1)——创建型模式

1.简单工厂模式/静态工厂方法 定义:简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. UML: PS:这个设计模式太简单了,没什么好解说的,简单来说就是通过传入一个标识到工厂类方法中,返回相应的具体产品. 2.工厂方法模式 定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使得一个类的实例化延迟到其子类. UML: PS:简单工厂模式的优点在于工厂类中包含了必要的逻辑判断,根据客户端传入的标识来动态实例化相应的类. 工厂方法模式是把简单工厂的内部逻辑判断,移到了客户

设计模式读书笔记-单件模式(创建型模式)

让一个类只有一个对象,全局唯一 非多线程模式,实现方法: 方法1: 1 public class SingletonTest 2 { 3 public static readonly SingletonTest Instance = new SingletonTest(); 4 private SingletonTest() { } 5 } 方法2: 1 public class SingletonTest 2 { 3 public static readonly SingletonTest I

Java的23种设计模式详解整理之创建型模式

最近重新阅读"四巨头"的设计模式. 对一些设计模式有了更多的理解. 原著中的例子是C++写的,不好理解. 这里我换成了Java, 代码示例仅供参考,没有具体实现. 介于个人水平有限,如有纰漏,请指正.有问题的朋友可以私信我或者发我邮箱(请到我主页查看),我看到就会回复. 希望和大家一起进步. 工作中有时候最困难的不是怎么去实现一个功能,而是怎么去设计一个功能.我常常会因为频繁改动需求大费脑筋.之后我在思考如何将一个功能在设计之初就做好扩展的准备,防止需求变动导致大面积的修改.code之

php设计模式(一):简介及创建型模式

我们分三篇文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式. 一.设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用.容易被他人理解的.可靠的代码设计经验的总结. 设计模式不是Java的专利,我们用面向对象的方法在PHP里也能很好的使用23种设计模式. 那么我们常说的架构.框架和设计模式有什么关系呢? 架构是一套体系结构,是项目的整体解决方案:框架是可供复用的半成品软件,是具体程序代码.架构一般会涉及到采用什么样的框架来加速和优化某部分问题的解决,而好的框架代