23种设计模式 - 创建型

23种设计模式研究过好几遍了,网上的解析和例子也是超多,我就不在耗费大量空间列demo例子了。为了**再研究下这个,顺便记录下体会以备日后查询。

注:类图引字互联网,但可能出处不唯一,所以不会全部列出出处。

=========================简单工厂===================================================================

1 简单工厂模式

解决的问题:

1)避免在程序中大量的使用new 描述符,因为new时需要记住目标类的名称(类多时很难);另外在后期维护如果想改具体类的名字会很简单(集中在工厂类中)。

2) 有时候父类在使用时不知道具体要new那个子类,这时候需要用到第二种模型。举例,父类A定义时需要使用某个具体类的一个方法,但是不知道应该new的具 体类名字,但A的子类B知道应该new什么对象。 所以A中直接使用B来get 具体类。B就是ConcreteFactory.

原理:

简单工厂一般有两种主要实现方式,

方式一较常见,核心是Factory类成员函数createProduct(type)中的type参数,根据type类型来new不同的concreteProduct类。即声明了创建对象的接口,封装了创建对象的过程。

方式二与方法一的区别是增加了一层抽象,即不但封装了对象的创建,而且将具体类的创建过程放到子类实现,父类知识提供了创建的接口。

不足:

1)方法一增加新的ConcreteProduct将更改CreateProduct()实现,导致不封闭。方法二每新建一个子类都需要在Factory中派生concreteProduct类,类爆炸啊。。。

====================抽象工厂=============================================================================

2. 抽象工厂

解决的问题:

1)在日常编程中通常需要根据情况的不同产生同类的一组对象,举例来说,一个游戏可 以设置高中低三个难度级别进行打怪兽(怪兽有很对种),所以当设置成不同级别的时候,所new出的对象就应该是响应级别的怪兽。抽象工厂可以完美解决这个 问题。该模式的目的是创建一组相关或者相互依赖的对象。

2)维护起来也相对容易很多,因为只需派生新的具体工厂类,或添加新的具体产品类就可完成新同组对象的添加。

原理:

抽象工厂的实现部分借鉴了简单工厂,抽象工厂类提供了产生一组对象的接口,而每一个具体工厂完成都完成一组相关对象的创建。比如,ConcreteFactory1创建的是1类型(A1和B1)对象。ConcreteFactory2创建的是2类型(A2和B2)类型。

====================单例模式=============================================================================

解决的问题:

系统中很对对象具有全局唯一性的特点,比如系统中的打印机,系统中的某些工厂对象。

原理:

实现上有懒汉模式(需要时创建对象)和饿汉模式(初始化时new对象)两种方式,核心都是创建一个静态的私有变量和一个静态共有获取方法,同时将构造函数私有化。。

其他:

在使用上单例模式可以和其他模式结合使用,如与工厂模式一起使用创建唯一的工厂对象。另外需要注意单例模式在多线程方面的使用问题,其中懒汉模式不是多线程安全的(需要check instance ==null),饿汉模式是线程安全的。

====================builder模式=============================================================================

解决的问题:

1. 生产某中同类型产品,这些产品拥有类似的生产过程顺序(方法),但每个生产过程略有不同时采用builder模式

2. 相同方法不同的执行顺序,生产出不同的产品

关键点:有一系列相同的方法,当这些方法的执行顺序或者方法的具体实现有细微差别时可采用builder模式 

原理:

Product类:具体的产品类,负责产品自身逻辑。builder不关注product内部方法和逻辑

Builer类:两种实现方式,一般都具备两个接口。方式1:提供构建产品的顺序结构e.g. buildA(), buildB()的方法1。提供getProduct()返回具体产品的方法2。 这种方式更具build*(para)中调用具体参数不同来构建product。该种方式适合解决生产顺序固定的问题。方式2:SetSequerence()设置构建产品顺序的虚方法1和getProduct()返回Product的虚方法2. 此时相同的方法有Product类提供,不同concreteProduct实现这些方法,且构建顺序由setSequence()方法提供。具体可参见转载的博文:http://www.cnblogs.com/stephen-init/p/3915809.html

ConcreteBuilder:实现builder接口

Director类:包含一个私有的builder接口数据成员,和一个construct()方法,该方法调用builder->build*()来完成构建和返回Product对象。

其他:

注意和抽象工厂的区别,他们解决的是不同问题。

====================Prototype模式=============================================================================

解决的问题:

有时需要根据当前对象创建相同的对象,提供了比直接调用拷贝构造函数更高一层的抽象。

关键点:复制对象自己,注意深拷贝

原理:

模式简单,注意深拷贝浅拷贝区别。

其他:

n/a

时间: 2024-11-10 18:22:15

23种设计模式 - 创建型的相关文章

23种设计模式----创建型模式

创建型模式的主要关注点是:如何创建对象?它主要目的是将对象的创建和使用分离.其中包括: 单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式. 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例. 工厂方法(FactoryMethod)模式:定义一个用于创建产品的接口,由子类决定生产什么产品. 抽象工厂(AbstractFactory)模式:提供一个创建产品族的接口,其每个子类可以生

23种设计模式-----创建型模式、结构型模式

一.创建型模式(都是用来帮助创建对象的) 1.单例模式 作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 应用:Windows的任务管理器.回收站:项目中读取配置文件的类:网站的计数器:应用程序的日志应用:数据库连接池:操作系统的文件系统:Application:Spring中的bean:Servlet:spring MVC框架/struts1框架中的控制器对象 选用:占用资源小.不需要延时加载--------枚举-->饿汉           占用资源大 .需要延时    --

23种设计模式----行为型模式

行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为.由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性.它包含以下 11 种模式: 模板方法(Template Method)模式:定义一个操作中的算法骨架,将算法的一些步骤延迟到子类中,使得子类在可以不改变该算法结构的情况下重定义该算法的某些特定步骤. 策略(Strategy)模式:定义了一系列算法,并将每个算法封装起来,使它们可以

23种设计模式 - 行为型

Template模式 UML图: 解决的问题: 应用程序中某些问题的解决办法或算法具有相同的结构顺序即逻辑框架,可以将逻辑(算法)框架封装在父类中,在各个子类中提供算法步骤的不同实现. 原理: 基类中TemplateMethod()即为逻辑算法的框架,在TemplateMethod中调用Primitive1()和Primitive2()接口(纯虚函数).而在各个子类中为Primitive1()和Primitive2()提供不同的实现,从而通过实例化不同的子类得到TemplateMethod()的

Java开发中的23种设计模式详解之一:5种创建型模式

一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 其实还有两类:并发型模式和线程池模式.用一个图片来整体描述一下: 二.设计模式的六大原则 1.开闭原则(Open Clo

23种设计模式介绍(一)---- 创建型模式

由于设计模式篇幅比较大,如果在一篇文章讲完所有的设计模式的话不利于阅读.于是我把它分为三篇文章 23种设计模式介绍(一)---- 创建型模式 23种设计模式介绍(二)---- 结构型模式 23种设计模式介绍(三)---- 行为型模式 由于设计模式都是比较抽象的概念,所以大家一定要确保看懂类图,而后再自己写代码加强记忆. 简介 设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接

Java经典23种设计模式之行为型模式(三)

本文接着介绍11种行为型模式里的备忘录模式.观察者模式.状态模式. 一.备忘录模式 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态.还是比较好理解的. 1.Memento 备忘录存储原发器对象的内部状态,这个类就是要存储的对象的状态.状态需要多少个变量,在Memento里就写多少个变量. public class Memento { private String state; public Meme*to(String st

23种设计模式介绍(三)---- 行为型模式

由于设计模式篇幅比较大,如果在一篇文章讲完所有的设计模式的话不利于阅读.于是我把它分为三篇文章 23种设计模式介绍(一)---- 创建型模式 23种设计模式介绍(二)---- 结构型模式 23种设计模式介绍(三)---- 行为型模式 设计模式都是比较抽象的概念,所以大家一定要确保看懂类图,而后再自己写代码加强记忆. 概述 行为型模式一共有11种: 模板方法模式(Template Method) 策略模式(Strategy) 命令模式(Command) 中介者模式(Mediator) 观察者模式(

Java开发中的23种设计模式详解之三:11种行为型模式

本章是关于设计模式的最后一讲,会讲到第三种设计模式--行为型模式,共11种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式.这段时间一直在写关于设计模式的东西,终于写到一半了,写博文是个很费时间的东西,因为我得为读者负责,不论是图还是代码还是表述,都希望能尽量写清楚,以便读者理解,我想不论是我还是读者,都希望看到高质量的博文出来,从我本人出发,我会一直坚持下去,不断更新,源源动力来自于读者朋友们的不断支持,我会尽自己