`
java-mans
  • 浏览: 11418123 次
文章分类
社区版块
存档分类
最新评论

【设计模式】读GOF设计模式想到的。

 
阅读更多

项目末期,不算忙,花了将近一个月的时间,终于把《设计模式》认真仔细学习了一下。

Experienced object-oriented designers will tell you that a reusable and flexible design is difficult if not impossible to get "right" the first time. Before a design is finished, they usually try to reuse it several times, modifying it each time.

感悟:好的代码一定是经过千锤百炼,在一遍遍的重构过程中,去其糟粕取其精华后提炼得到的。

而我现在所在的项目组,为了不出bug,领导却一再强调尽量不要改动代码,没有给出时间做review,refactoring。果然,到了项目末期,

改一个bug出两个的“美好”时代到来了,加班费赚着了,却接不着新项目了,公司的level也只能取决与领导的眼界了。


The core of both kinds of patterns is a solution to a problem in a context.

The design patterns in this book are descriptions of communicating objects and classes that are customized to solve a general design problem in a particular context.

Christopher Alexander 才是设计模式的祖师爷,建筑专业的同学应该挺膜拜此人的吧?


(1) AbstractFactory 抽象工厂

生产一系列产品(families of products)

(2) Adapter 适配器

改变现存类的接口,分为两种 class adapter和object adapter

android中的adpter属于object adapter。

(3) Bridge 桥接

抽先与实现分离。

(4) Builder 生成器

一步一步(step by step)地去生产一个产品,生产细节是隐藏的。

android中的AlertDialog.Builder应该是退化的builder模式。

(5) Chain of Responsibility 责任链

消息传递机制就是它了

(6) Command 命令

把请求封装成对象,通过继承生成不同的对象,不改变接口的情况下,传递不同的命令,实现不同的功能。

(7) Composite 组合

分形,局部自相似性

(8) Decorator 装饰

动态添加功能

(9) Facade 外观

将多subsystem整合成一个类

(10) Factory Method 工厂方法

产生一个产品,可以将初始化动作推迟到子类,注意与Abstract Factory的区别,不过二者经常一起使用。

(11) Flyweight 享元 (不知道为什么翻译成这个中文名)

我理解的意思就是轻量级,可以将许多元素抽象出来形成类 。

这个设计思想再游戏设计中应该很常用。

(12) Interpreter (解释器)

根据给出的规则去解析一段内荣

(13) Iterator (迭代器)

在容器中可以通用的遍历模式

(14) Mediator (中介者)

中央处理器

(15) Memento (备忘录)

不破坏封装性,将对象内部状态存储在外部。

(16) Observer (观察者)

最典型用法是MVC模式,当时subject跟observer之间可以是one-to-many也可以是many-to-many,

跟Memento的最大区别是两者的intent不同,Observer是为了保证所有的observers的一致性。

(17) Prototype (原型)

防止出现继承爆炸

(18) Proxy (代理)

监护人的角色,提别人做决定。跟adapter是不同的,adapter是改变interface,proxy是控制interface

(19) Singleton (单例)

只有一个实例存在,避免使用全局变量的一个很好的方案。

(20) State(状态)

通过状态来控制对象的动作,而状态的转换对对象可能是透明的。

(21) Strategy 策略

存在一组相同同能的算法,也就是family of algorithms,把每一个算法封装以后,他们之间可以相互交换。

这个是模式实际上是把算法抽象成一个物体,所以factory method和abstract factory都可以结合其来一起使用。

(22) Template Method 模板方法

先定义一个算法,步骤抽象,将具体实现推迟到子类,

这个模式在继承多态的时候肯定要用到。

(23) Visitor (访问者)

给对象体系结构开了个后门,可以做你喜欢的事情哦。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics