专题:GoF 的《设计模式》

设计模式概述

GoF 的《设计模式》\r\n在面向对象的编程中,软件编程人员更加注重以前的代码的重用性和可维护性。\r\n\r\n设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。

一个模式有四个基本要素 :\r\n\r\n1. 模式名称(pattern name) 一个助记名,它用一两个词来描述模式的问题、解决方案和效果。\r\n2. 问题(problem) 描述了应该在何时使用模式。\r\n3. 解决方案(solution) 描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。\r\n4. 效果(consequences) 描述了模式应用的效果及使用模式应权衡的问题。

A.创建模式\r\n设计模式之Factory(工厂方法和抽象工厂)\r\n 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。\r\n设计模式之Builder\r\n Builder:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。\r\nPrototype:用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。

B.结构模式\r\n设计模式之Proxy\r\n为其他对象提供一个代理以控制对这个对象的访问。\r\n设计模式之Adapter\r\n使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。\r\n设计模式之Composite\r\n将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。

C.行为模式\r\n设计模式之Template\r\n 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。\r\n设计模式之Observer\r\n Observer:定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。

设计模式

-创建型模式

迷宫游戏最初代码:\r\n例子

工厂方法(Factory Method)

目的:\r\n通过定义一个创建产品的接口,让Creator的子类具体决定实例化哪个产品类. 即将产品的实例化延迟到子类.\r\n结构:\r\n实现:\r\n无参工厂方法\r\n参数化工厂方法\r\nVirtual Product * MakeProduct(int ProductID) ;\r\n使用摸板类:\r\nTemplateClass SubCreator:public Creator\r\n{ virtual Product * MakeProduct() {return new TheProduct;}}\r\n例子:

工厂方法结构

抽象工厂(Abstract Factory)

目的: 提供一个类,它定义了创建一系列产品的接口函数;在这个类的派生类中,重写某些接口函数,以便生成新产品系列。\r\n结构:\r\n优点和缺点:\r\n易于改变产品系列\r\n难以增加新种类的产品\r\n例:

抽象工厂

生成器(Builder)

目的:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.\r\n工作原理:Builder 模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.用户不知道内部的具体构建细节.

为何使用?\r\n是为了将构建复杂对象的过程和它的部件解耦.注意: 是解耦过程和部件.\r\n如何使用?\r\n首先假设一个复杂对象是由多个部件组成的,Builder 模式是把复杂对象的创建和部件的创建分别开来,分别用Builder 类和Director 类来表示.

结构\r\n优点:\r\n易于改变复杂产品的内部表示\r\n易于控制构造过程\r\n例1:\r\n例2:

生成器

原型(Prototype)

目的: Prototype 模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节。\r\n工作原理:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。

结构:\r\n优点:\r\n减少子类 \r\n运行时可改变应用的产品\r\n例1:

原型

Singleton(单态)

定义:\r\nSingleton 模式主要作用是保证在应用程序中,一个Class 只有一个实例存在。一个实例表示是单线程,在很多操作中,比如建立目录 数据库连接都需要单线程操作,Singleton 模式经常用于控制对系统资源的控制