posted @ 2013-10-01 17:16
随笔分类 - 设计模式
摘要:前面介绍了一个创建迷宫的实现,首先介绍了一种最直接的实现,creator-也即MazeGame的CreateMaze()方法通过直接引用具体对象类来创建一个迷宫,这种通过硬编码的方式来创建对象存在可扩展性的问题,当创建其他类型的迷宫时需要修改CreateMaze()方法。 为解决CreateMaze()方法硬编码具体对象类的问题,抽象工厂模式和生成器模式抽象了创建对象的过程,将创建对象的过程分装了MazeFactory和MazeBuilder,MazeFactory仅仅封装了具体对象的创建而MazeBuilder不仅封装了具体对象的创建,并且封装了组装对象的细节。同时抽象工厂模式和生成器...
阅读全文
摘要:单件模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 单件模式实现:1.类方法Instance()提供访问实例的全局访问点。2.类构造函数声明为protected,防止直接实例化类的对象。将抽象工厂实现为单件的一种简单方式,客户通过Instance接口获取唯一实例:/* 实现为单件的抽象工厂类 */ class MazeFactory {public: static MazeFactory* Instance(); //existing interface goes hereprotected: MazeFactory();/* 构造方法为保护,避...
阅读全文
posted @ 2013-10-01 17:10
摘要:原型:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型实现:1.用于创建对象的具体类必须实现clone()操作,用于对象克隆自己以生成新的对象。下面通过原型来实现一个抽象工厂MazePrototypeFactory,creator使用原型工厂来创建对象。派生MazePrototypeFactory原型工厂:/* 原型工厂 */class MazePrototypeFactory:public MazeFactory {public: MazePrototypeFactory(Maze*, Wall*, Room*, Door*); virtual...
阅读全文
posted @ 2013-10-01 16:12
摘要:工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。 工厂方法实现:迷宫地图创建类MazeGame声明创建构件对象的接口或者创建默认的构件对象,派生不同的MazeGame子类来实现其他迷宫类型的创建。产品对象创建类MazeGame:/* 产品创建类 */class MazeGame {public: Maze* CreateMaze(); //... /* 工厂方法 */ virtual Maze* MakeMaze() const { return ...
阅读全文
posted @ 2013-09-30 22:21
摘要:生成器模式意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 生成器模式实现:1.定义MazeBuilder迷宫地图生成器以封装创建产品使用的构件(具体类)以及产品的内部表示。通过派生新的生成器并使用新的生成器对象,同样的构件过程可以创建不同的产品。生成器封装了创建产品使用的那些具体类,已经组装具体类对象的细节:/* 迷宫地图抽象构造器类 */class MazeBuilder {public: virtual void BuilderMaze() {} virtual void BuilderRoom(int room) {} virtu...
阅读全文
posted @ 2013-09-30 21:33
摘要:抽象工厂:提供一个创建一系列相关或相互依赖对象的接口(抽象工厂类),而无需指定他们具体的类。 抽象工厂模式的实现:1、定义抽象工厂 抽象类MazeFactory以定义一系列创建对象的接口。2、修改客户创建产品的函数,使得该函数可以接收具体工厂类对象,通过抽象工厂方法来创建产品元素对象,避免客户代码对具体类的引用。客户代码仅引用抽象工厂类MazeFactory和抽象产品类Room、Door、Wall。抽象工厂模式在迷宫地图创建中的实现:/* 抽象工厂类 */class MazeFactory {public: MazeFactory(); virtual Maze* M...
阅读全文
posted @ 2013-09-28 23:25
摘要:分析qemu开源代码有一段时间了,时常惊叹于qemu中某些功能实现的灵活巧妙,qemu中对于I/O的处理方法、qemu设备模型、qemu中的通知链等。阅读qemu代码时常想起已经忘记的差不多的设计模式,在学校时曾经阅读过设计模式方面的书籍,当时理解的就相当的抽象,加上毕业后的工作中编写代码的机会很少,以至于大部分都已经忘得差不多。 对于开源软件的分析,再一次感受到设计模式在一款优秀软件中的至关重要的作用,希望这几天抽时间再次翻一翻设计模式相关的书籍,将重要的知识点和理解记录下来,希望能够对软件设计方法能够有更加深层次的理解。下面首先是针对 对象创建型设计模式的总结。 在代码中直接实例化...
阅读全文
posted @ 2013-09-28 22:00
浙公网安备 33010602011771号