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

1、简单工厂模式/静态工厂方法

  定义:简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

  UML:

  PS这个设计模式太简单了,没什么好解说的,简单来说就是通过传入一个标识到工厂类方法中,返回相应的具体产品。

2、工厂方法模式

  定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。

  UML:

  PS:简单工厂模式的优点在于工厂类中包含了必要的逻辑判断,根据客户端传入的标识来动态实例化相应的类。

    工厂方法模式是把简单工厂的内部逻辑判断,移到了客户端进行,由客户端调用具体的工厂类ConcreteFactory去生成相应的具体产品ConcreteProduct。如上面UML中所示,每一种产品都有相应的工厂类ConcreteFactory,有多少种产品就有多少个工厂类ConcreteFactory。

3、抽象工厂模式(Abstract Factory)

  定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

  UML:

  PS:比如我们的系统需要同时支持Oracle和MSSql,那我们可以把上面UML中的ProductA1看做是对Oracle数据库的操作,ProductA2看做是对MSSql数据库的操作,这时使用抽象工厂模式的好处时,如果哪天需要把MSSql数据库切换成Oracle数据库时,就只需要更改使用到ConcreteFactory的地方就可以。此模式主要利用的就是面向接口编程的优点。该模式可以配合简单工厂模式,或用反射+配置文件的方式来进一步优化。

4、建造者模式(Builder)

  定义:建造者模式又称生成器模式,它将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

  UML:

  PS:具体建造者类ConcreteBuilder.BuildPart()只建造成品的特定组件,ConcreteBuilder中可能有多个BuildPart()去建造各种组件,然后具体成品的组装则由Director来完成。我第一反应是觉得Director完全没有存在的必要,直接都由建造者来完成就可以了,但再想想时觉得,这也许就是减耦建造组件和组装组件的耦合。至于是把代码放在同一个类中或多个类中不一定就对模式有破坏性。

  参考代码:

  应用场景类比:建造胖瘦小人

5、原型模式(Prototype)

  定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

  UML:

  PS:原型类中定义一个方法来克隆自身,可以实现ICloneable接口来完成原型模式。

  应用场景类比:简历复制

6、单例模式(Singleton)

  定义:保证一个类只有一个实例,并提供一个访问它的全局访问点。

  UML:

  PS:单例模式应该是平时应用比较多的一种模式,该模式主要在于把构造函数设置为私有,并提供一个可供全局访问的点。虽然说常用,但还是有两点值得一提的。一是单例类声明为sealed,以防止派生增加实例的风险,二是多线程中使用时要双重锁定。这种实现方式是我之前常用,这种方式被称为赖汉式单例类,因为它只有第一次被引用时,才取实例化。另外还有一种饿汉式单例类,它是把instance设置为静态,并在声明赋值时实例化,这种”静态初始化“方法就不需要考虑多线程的问题。这两种方式各有利弊吧,看实际需求取舍吧。

原文地址:https://www.cnblogs.com/Lau7/p/8350503.html

时间: 2024-10-01 03:12:17

《大话设计模式》笔记(1)——创建型模式的相关文章

设计模式(3)-对象创建型模式-Abstract Factory模式

1.对象创建型模式 1.3           Abstract Factory模式 1.3.1 需求 在下面情况能够使用Abstract Factory模式: ?  一个系统要独立于它的产品的创建.组合和表示时(这个需求和FactoryMethod类似). ?  一个系统要由多个产品系列中的一个来配置时(这个需求也和Factory Method类似). ?  当你要强调一系列相关的产品对象的设计以便进行联合使用时(这个需求表明一个工厂要创建多个相关的产品对象,是比FactoryMethod多的

天天设计模式二:创建型模式实践

天天设计模式二:创建型模式实践 创建型设计模式主要应用在对象创建,以不同的方式来满足系统的灵活性配置.动态注入.等应用场景. 一.单例模式 二.抽象工厂 三.建造者模式 四.工厂方法模式 五.原型模式

菜鸟学设计模式系列笔记之创建型模式简介

设计模式是"封装变化"方法的最佳阐释 无论是创建型模式.结构型模式.还是行为型模式,归根结底都是寻找软件中可能存在的"变化",然后利用抽象的方式对这些变化进行封装. 由于抽象没有具体的实现,就代表了一种无限可能性,使得其扩展成为了可能. 经典设计模式都是在寻找软件中的可能变化,并封装这些变化. 封装通常的理解:将数据(属性)和对数据的操作(方法)放到一个程序单元(类)中,从而使得概念上相关的数据和操作在编程语言上相关:正确的理解:信息隐藏--隐藏细节,对对象内部细节

NET设计模式 第二部分 创建型模式(6):创建型模式专题总结(Creational Pattern)

创建型模式专题总结(Creational Pattern) ——.NET设计模式系列之七 Terrylee,2006年1月 概述 创建型模式,就是用来创建对象的模式,抽象了实例化的过程.它帮助一个系统独立于如何创建.组合和表示它的那些对象.本文对五种常用创建型模式进行了比较,通过一个游戏开发场景的例子来说该如何使用创建型模式. 为什么需要创建型模式 所有的创建型模式都有两个永恒的主旋律:第一,它们都将系统使用哪些具体类的信息封装起来:第二,它们隐藏了这些类的实例是如何被创建和组织的.外界对于这些

Java设计模式之五大创建型模式(附实例和详解)

一.概况 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. (2)结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. (3)行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 二.设计模式的六大原则 1.开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修

设计模式一:创建型模式

知识储备: 1.接口:若干抽象方法的集合 作用:限制实现接口的类必须按照接口给定的调用方式实现这些方法:对高层模块隐藏了类的内部实现. 2.面向对象设计SOLID原则 开放封闭原则:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭.即软件实体应尽量在不修改原有代码的情况下进行扩展. 里氏替换原则:所有引用父类的地方必须能透明的使用其子类的对象. 依赖倒置原则:高层模块不应该依赖底层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象.换言之,要针对接口编程,而不是针对实现编程.

设计模式(4)-对象创建型模式-Prototype模式

1.对象创建型模式 1.4          Protoype模式 1.4.1需求 通过拷贝原形对象创建新的对象. 1.4.2结构 ?P r o t o t y p e(Gr a p h i c) - 声明一个克隆自身的接口. ?C o n c r e t e P r o t o t y p e(S t a ff.W h o l e N o t e.H a l fN o t e) - 实现一个克隆自身的操作. ?  C l i e n t(G r a p h i c To o l) - 让一个原

设计模式感悟之创建型模式

创建型模式总结:     地球(客户)需要一个大自然(产品),该大自然需要有很多动物(产品功能),很多植物(产品功能).大自然使用单例模式和抽象工厂模式的结合模式.动物和植物采用简单工厂方法模式创建.以创建动物为例:在简单工厂里遇到相同的"人",直接采用原型模式克隆,法则采用建造者模式创建. public Animal {     private String mType = null;     public Animal clone()     {           ...    

Java设计模式——单例模式(创建型模式)

概述 ??单例模式保证对于每一个类加载器,一个类仅有一个实例并且提供全局的访问.其是一种对象创建型模式.对于单例模式主要适用以下几个场景: 系统只需要一个实例对象,如提供一个唯一的序列号生成器 客户调用类的单个实例只允许使用一个公共访问点,除了该公共访问点,不能通过其他途径访问该实例 ??单例模式的缺点之一是在分布式环境中,如果因为单例模式而产生 bugs,那么很难通过调试找出问题所在,因为在单个类加载器下进行调试,并不会出现问题. 实现方式 ??一般来说,实现枚举有五种方式:饿汉式.懒汉式.双