大概上一次我学习设计模式的时候,是大三的时候了吧,当时我就感觉得到这门课程不一样的重要性,以前的软件工程只是说明解耦的必要性,我在大二的时候编写过8000行的C语言的程序,我清楚模块化,把握好代码粒度给程序整体复用率带来非常好效果,软件工程这门课程中总结出来的解耦经验是非常实在的。到现在我都还没编写过什么大型的面向对象的系统,我觉得自己对所有的一切面向对象领域都非常无知。我想知道得更多,做得更好。
乘着这个机会重新温习一下面向对象的基本知识。
面向对象程序设计的目标:提高重用性,灵活性,扩张性。
面向对象程序设计6大原则:
1,Open-Close Principle(OCP),开闭原则。设计要对扩展有好的支持,而对修改要严格限制
2,Liskov Substituition Principle(LSP),里氏代换原则。子类必须能够替换基类,否则不应当设计为其子类。
3,Depandence Inversion Principle(DIP),依赖倒置原则。设计要依赖于抽象而不是具体化。
4,Interface Segregation Principle(ISP)接口隔离原则。将大的接口打散成多个小接口。
5,Composition/Aggregation Reuse Principle(CARP)。组合/聚合重用原则。设计者首先应当考虑复合/聚合,而不是继承。
6,Law of Demeter or Least Knowlegde Principle(LoD or LKP)迪米特法则或最少知识原则,这个原则首次在Demeter系统中得到正式运用,所以定义为迪米特法则。它讲的是“一个对象应当尽可能少的去了解其他对象”。也就是又一个关于如何松耦合(Loosely-Coupled)的法则。
一,创建型模式:
1,抽象工厂方法-模式:
主要用于生产不同的产品族产品。一个工厂生产A1,B1,一个工厂生产A2,B2。
2,生成器-模式:
跟工厂方法的区别在把自己的生产过程开放给指导者,由指导者来决定生产什么样的产品。
3,工厂方法-模式:
创建具体的工厂来生成具体的产品。A工厂生产A产品,B工厂生产B产品。
4,简单工厂和静态工厂-模式:
都是通过传 产品类型 给工厂,工厂来生成。不同区别在于一个是用普通方法,一个是用静态方法,静态方法意味着你不用创建工厂。
5,多例-模式:
在管理器里面包含了一个数组,数组里面储存了许多实例,通过实例名匹配,然后从管理者里面获取实例。春夏秋冬都是一个天气实例,由令节神管理。
6,池-模式:
跟多例模式有点类似,但不同的点在于 管理者里面已经有了使用实例的方法,别人通知管理者,管理者判断是否可以用,可以就拿一个出来用,用完放回去。
7,原型-模式:
好像没什么特别,就是用 克隆的方法来创建新的实例。PHP语法已经支持这么做了。
二,结构性模式:
1,适配器/包装器-模式:
最经典的例子是ODBC吧。生活例子就是苹果充电器的插头转成我们的家用的插头。主要是把以往已经有的方法或者类通过包装器(适配器)重新包装起来,以适应新的应用环境。
2,桥接-模式:
把两个变化点抽象起来归到一个类里面,再然后再统一用一个具体方法来使用。
3,组合模式
把一组具有相同接口的实例统一起来,调用的时候全部一起调用。把它们看作一个实例。
4,数据映射器-模式
这个模式主要用于解决数据库与面向对象系统之间的不兼容,DataMapper主要就是用来进行数据库的增删改查,但外界只是看到find,save,new,delete这样的函数。
5,装饰器-模式:
如果原有的类的某个接口需要增加一些功能,我们用装饰器包装原来的类,重写该接口。这样子算是增加代码,并不算修改代码。装饰器也可以多种多样哦。
6,依赖注入-模式(这什么鬼???)
其实我倒不觉得这是什么模式,更像一种编程技术。简单理解的话,就是把我们要创建的类及属性以某种形式(XML,PHP array,JSON)放到文本或者数据库,然后当要使用的时候,我们再从中取出来。这样子我们需要修改创建的类和属性的时候,并不会影响原来的代码。
7,外观模式
简单来说,就是我写好一个建造房子的程序,一键造房。不用再关注里面用什么地砖,水泥,油漆什么的。当然也不会阻止你去弄油漆和水泥之类的事情。
8,流畅接口-模式
To write code that is easy readable just like sentences in a natural language (like English).(故意用英文的)。
9,代理-模式
实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。跟装饰者模式有点类似,不过装饰者是可以一层包一层的。有控制访问的功能在里面。
10,注册模式
又叫电话本模式,跟多例模式很像,不同的区别在于,多例模式中多例是同一个类的多个实例,这里注册模式则不是。
三,行为模式
1,责任链-模式
跟字面意思差不多。让多个对象有机会处理同一个事件(或者请求)。
2,命令-模式
简单说,就是将调用者和执行者解耦,同时也可以加入栈来实现回退功能。
3,迭代器-模式
不太明白为什么要看作是一个模式,把遍历过程封装起来是由一些优点的。如果储存数据的数据结构换了,换一个迭代器即可。
4,中介者-模式
统一管理一堆对象。这样子可以解决一堆对象直接之间的直接耦合。不过要有良好的设计。不然中介者本身的逻辑会非常复杂。
5,备忘录-模式
把整个对象都保存到originator,需要的时候再从中恢复回来。
6,空对象-模式
据说是简化写法喔
7,观察者-模式
跟责任链模式有点类似,不同的是观察者模式一般是被观察者主动的将收集到的变化信息推送给观察者类,然后各个观察者再自己去弄。
8,规格-模式
简单来说就是可以动态添加条件类。AND OR NOT 都要有动态添加条件的能力。
9,状态-模式
一个类,然后不停的切换状态类,然后调用状态类里面的方法,以根据场景达到多态效果。
10,策略-模式
在我们的类中绑定策略类。随时随地切换。然后调用策略类里面的方法以达到多态,跟状态模式不同的是,没有一个管理者类。把策略类完全暴露出来。
11,模板-模式
一个final函数 ,一套函数调用过程,然后让子类去继承,继承以后根据自己的需要来定制实际的操作过程。但大框架不变。
12,访问者-模式
书上说法,当你想要为一个对象的组合增加新的能力,且封装并不重要时,就使用访问者模式。不是很懂这样做的优点。
观摩程序员的艺术
《深入浅出设计模式(影印版)》热门书评
-
Head First Design Patterns让设计模式走向大众
24有用 1无用 红眼睛阿义 2006-02-08
本影印版刚拿到手,感觉沉甸甸的,第一印象就不错,网上评价也很好。恰巧快到春节,于是在书架一大堆的书籍中,我只选择这本比较厚重的,塞到我的行李包中。翻开一看,真如Erich Camma所说,简直欲罢不能.本书是Oreilly的Head First系列中的一本,本系列书籍的特点是采用大量的插图、图例来进...
-
入门看这本书的话很不错
16有用 3无用 Luffy Lee 2009-11-14
写得很有趣,图文并茂,比起四人帮的那本,好懂了不知道多少倍。计算机世界的head first系列让我想起了阿呆系列,话说新的一集the big bang theory里面lennerd学习橄榄球的时候也有一本阿呆啊,哈哈,跑题了不过只看书学明白设计模式是不可能的,这些只是前人的总结,我们唯有实践实践...
-
值得每一位程序员阅读的书
10有用 0无用 曹操 2009-04-02
读这本书不仅仅是学习知识,而是在学习一种思考的方法,学习一种认知的技巧,学习一种成长的阶梯。总之,用你闲暇的时间来读这本书,并不亚于你专注的工作或学习。...
-
深入浅出
9有用 0无用 Jarod 2006-09-13
这本书没有辜负这个名字。作者说他们把原本属于设计模式的来源还给设计模式的学习和应用过程。他们确实这样做到了。让读者能够从生活中的例子随着论述的展开,逐步深入设计模式的核心,这个确实是在目前的设计模式教程里面比较少见的,这个也是这本书能够不负其初衷的重要原因。...
-
拿了Jolt大奖的东西
7有用 1无用 yasker 2006-12-25
看书之前本来仰慕已久,不过看完了稍显失望。怎么说呢,这种非常轻松的东西倒是很好,就是有点过于分散了点。另外有的模式对我来说简直是惊世骇俗,但是有的实在是非常符合一般规律,能够直接根据OO的原则想出来的。还有一点不太满意就是习题有的有点弱智,有的又跑得太远……这方面规划似乎不是太好。每章的总结倒是非常...
书名: 深入浅出设计模式(影印版)
作者:
出版社: 东南大学出版社
原作名: Head First Design Patterns
出版年: 2005-11
页数: 638
定价: 98.00元
装帧: 平装
丛书: O'Reilly深入浅出系列
ISBN: 9787564101657