前言 前面介绍了OOAD的基础知识,现在我们来详细的说明一下GOF设计模式中的23种模式,希望大家能够学到东西! 一.工厂方法模式(Factory Method) 1.1.工厂方法模式概述 工厂方法模式属于创建型模式,是简单工厂模式(Simple Factory)的一个升级版.工厂方法模式分为三种:普通工厂模式   多个工厂方法模式   静态工厂方法模式. 1)角色与职责 抽象产品: 工厂产物的抽象.工厂所要创建的实例的类都继承于同一个抽象类或者接口. 具体产品: 工厂的具体产品.所有的具体产品…
我们大家一听到设计模式就感觉设计模式是一个高端的东西,到底什么是设计模式呢?其实设计模式也就是我们的前辈在写代码的时候遇到的问题,提出的解决方案,为了方便人与人之间的交流,取了个名字,叫做设计模式. 创建型设计模式 本文今天主要写一部分创建型设计模式,创建型设计模式呢就是我门创建对象的时候的一种模式.废话不多说了,直接上代码和解释吧. 单例模式 目的:单例模式的目的是为了解决全局命名空间污染,冲突. function g(id) { return document.getElementById(…
php开发面试题---创建型设计模式1(创建型设计模式有哪几种) 一.总结 一句话总结: 共五种:(简单工厂模式).工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 1.学设计模式最好的方式是什么? 能够自己举例,举一反三,并且多举例 用:用永远是最好的学习方式 自己实例多用性:一举三得:所有的设计模式,往legend系统里面来靠,这样既学了设计模式,又改进了legend2,而且这还是能把设计模式学好的为数不多的几种方法 2.设计模式大的分类有哪几种? 创建型模式,共五种:工厂方法模…
注:关乎对象的创建方式的设计模式就是“创建型设计模式”(creational design pattern) 1.1 抽象工厂模式 “抽象工厂模式”(Abstract Factory Pattern)用来创建复杂的对象,这种对象由许多小对象组成,而这些小对象都属于某个特定的“系列”(family). 比如说,在GUI 系统里可以设计“抽象控件工厂”(abstract widget factory),并设计三个“具体子类工厂”(concrete subclass factory):MacWidge…
原型模式  prototype 意图 用原型实例指定需要创建的对象的类型,然后使用复制这个原型对象的方法创建出更多同类型的对象   显然,原型模式就是给出一个对象,然后克隆一个或者更多个对象 小时候看过的动画片<西游记>,主题曲猴哥中有一句“拔一根毫毛 ,吹出猴万个 ”这就是原型模式 孙悟空作为原型对象,“拔一根毫毛 ,吹” 这就是调用复制对象方法,“猴”万个,就是结果了,创建了“万个” 猴子  原型模式的根本-拷贝 原型模式的根本在于对象的拷贝 说白了就是:如何复制一个对象?   对象的表示…
 结构 意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 适用性 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时. 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时. using System; class Singleton { private static Singleton _instance; public static Singleton Instance() { if (_instance == null) _inst…
1. 单例(Singleton) Intent 确保一个类只有一个实例,并提供该实例的全局访问点. Class Diagram 使用一个私有构造函数.一个私有静态变量以及一个公有静态函数来实现. 私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量. Implementation Ⅰ 懒汉式-线程不安全 以下实现中,私有静态变量 uniqueInstance 被延迟实例化,这样做的好处是,如果没有用到该类,那么就不会实例化 uniqueInstance,从…
结构   意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 适用性 当要实例化的类是在运行时刻指定时,例如,通过动态装载:或者 为了避免创建一个与产品类层次平行的工厂类层次时:或者 当一个类的实例只能有几个不同状态组合中的一种时.建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些. using System; // Objects which are to work as prototypes must be based on classes whi…
结构 意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 适用性 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 当构造过程必须允许被构造的对象有不同的表示时. using System; // These two classes could be part of a framework, // which we will call DP // =============================================== cl…
结构            意图         提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 适用性     一个系统要独立于它的产品的创建.组合和表示时. 一个系统要由多个产品系列中的一个来配置时. 当你要强调一系列相关的产品对象的设计以便进行联合使用时. 当你提供一个产品类库,而只想显示它们的接口而不是实现时. using System; // These classes could be part of a framework, // which we will…