// // // // // // // // //
///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模式常见的实例。