【2013.1.10】设计模式C++ 实现

// // // // // // // // //

///2013.1.10

// // // // // // // // //

关于设计模式(GoF),

这是一个面向对象编程人员一个不可避免的话题。


笔者修行尚浅,

只是将其通读一遍,

并思考过一段时间,

编了一些程序来实现而已。


但我正是因为站在与大家相差不多的位置,

我才能更深入的了解大家想要知道的是什么。

以及哪里是应该详细阐述的,

哪里是应该举例佐证的。


同时,

我也希望,

能够在这将近两个月的时间里,

继续加深自己对设计模式以及面向对象编程的思考。


在这里并不推荐大家先通读一遍GoF,

因为那是天才博士们写成的,

想法十分抽象,

并且最为重要的是,

没有完整代码。


作为参考,

我使用的是k_eckel前辈的C++设计模式解析一书作为主要参考,

微软设计模式教学视频其次,

文章参考再次之,

辅之以过往笔记,及自己理解。

最后每个模式都会给大家具体的代码来参考。


还有大家要分清的是,

设计模式不是一种高深的语法,

不是新手就不能接触的,

它是一种思想,

一种将面向对象编程发挥到极致的思维。


非常感谢南非Judith Bishop教授的《C#3.0设计模式》一书,

让我在过去的那个炎炎夏日能够进行一些冷静的思索。


最后,

是设计模式的要义,大家一定要谨记:

高内聚(cohesion),低耦合(coupling)。


掌握它,

将会使你达到一个新的高度。


// // // // // // // // //

///2013.1.11

// // // // // // // // //

设计模式分为三种:

创建型模式、结构型模式、以及行为模式。


它们分别包括:

创建型:

Factory,

Abstract Factory,

Singleton,

Builder,

Prototype


结构型:

Bridge,

Adapter,

Decorator,

Composite,

Flyweight,

Facade,

Proxy.


行为:

Template,

Strategy,

State,

Observer,

Memento,

Mediator,

Command,

Visitor,

Chain Of Responsibility,

Iterator,

Interpreter


怎样简单去理解这些模式呢?


就我自己总结来说,

我认为创建型模式主要与new这个关键字所相关联,

并围绕new所采取的一些较为特殊的方式来实现架构的一种设计类型。

例如大家熟知的Singleton模式,

就是很简单地将构造器封装起来,并返回一个静态实例;

还有Prototype,通俗的理解就是使用复制的手法来代替new的实例化。


而结构型模式则是偏向于从代码结构方面去考虑设计。

比如说Proxy,这是一种很常见的设计模式,

用一句话来概括就是A类通过B类访问C类(此处类为泛指,并非特指class)。

还有例如Decorator设计模式,

同样只是在不修改底层稳定的接口来实现功能的扩展(很容易想到使用集成来实现)。


最后是行为模式,

顾名思义,只是对一种类似行为进行高度的抽象与概括而形成的一种设计模式。

比如说我想制作一个游戏,

主角拥有attack,defend,sleep三种状态,

在这三种状态下主角的防御力都不同,

那么我就可以使用State模式来实现,

当对方攻击自身的时候,

不管是位于那个状态,

都将调用同一个接口来实现(比如说beAttacked()),

所不同的只是内部的算法不同而已,

但是这样的话就与接口进行了解耦。

那当主角想要攻击的时候,

就又可以使用Strategy模式来实现:

假设可以选择四个招式:FireAttack(),DrinkBlood(),SelfBoom(),GleamAttack(),

主角所要做的只是调用Attack接口,

然后就会根据玩家的选择分别传入不同的行为策略(此处为攻击招式)。

当然行为模式的应用也是相当广泛的,

例如说大家所熟知的微薄人人之类的就广泛地使用了Observer模式,

还有大部分的Ctrl+Z(撤销命令)也是Command模式常见的实例。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值