《Head First设计模式》读书笔记 - 1

Posted on 2008-04-13 15:01 applupus 阅读(1466) 评论(0)  编辑  收藏 所属分类: 设计模式
设计原则1
找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

不管当初软件设计得多好,一段时间后,总是需要成长与改变,否则软件会死亡。

设计原则2
针对接口编程,而不是针对实现编程。

其真正意思是针对超类编程,不一定非要用接口,关键在多态。这样程序在执行时会根据实际状况执行到真正的行为,不会被绑死在超类型的的行为上。

更明确地说,是变量的声明类型应该是超类型,通常是一个抽象类或者是一个接口,如此,只要是具体实现此超类型的类所产生的对象,都可以指定给这个变量。

设计原则3
多用组合,少用继承。

组合建立的系统具有更大的弹性,不仅可以将算法封装成类,更可以在运行时动态地改变行为。

1、策略模式(Strategy)
定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

使用模式谈论软件系统,可以让你保持在设计层次,不会被压低到对象与类这种琐碎的事情上面。

建立可维护的OO系统,要诀就在于随时想到系统以后可能需要变化以及如何应付变化的原则。

2、观察者模式(Observer)
定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。有push和pull两种模式。

典型:Swing中的Listener。

设计原则4
为了交互对象之间的松耦合设计而努力。

关于java内置的观察者模式支持。
Observable是一个类而不是接口,java不支持多继承,限制了Observable的复用潜力,无法建立自己的实现。
它将关键的方法protected起来,这样除非继承自Observable,否则无法创建Observable实例并组合到自己的对象中来。
所以除非Observable符合你的要求,否则自己实现一套观察者模式。
setChanged()方法把changed标志设为true,notifyObservers()只会在changed标为true时才会通知观察者。

不要依赖于观察者被通知的顺序。

设计原则5-开放关闭原则
类应该对扩展开放,对修改关闭。
---代码应该如同晚霞中的莲花一样地关闭(免于改变),如同晨曦中的莲花一样地开放(能够扩展)。

让设计的每个部分都遵循开放-关闭原则,通常是办不到的。即使做到了也会耗费大量的时间和精力,遵循开放关闭原则通常会引入新的抽象层次,增加代码的复杂度。你需要把注意力集中在设计中最有可能改变的地方,然后应用开放-关闭原则。
这需要多看例子积累经验。


3.装饰者模式(Decorator)
动态地将责任附加到对象上。若需要扩展功能,装饰者提供了比继承更有弹性的替代方案。符合开闭原则!

装饰者与被装饰对象拥有相同的超类型。
可以用一个或者多个装饰者包装一个对象。
在任何需要被包装对象的场合,都可以用装饰过它的对象代替它。
装饰者可以在被装饰者的行为之前/之后,加上自己的行为,以达到特定的目的。
对象可以在任何时候被装饰,所以可以在运行时动态地、不限量地用你喜欢的装饰者来装饰对象。

典型:java i/o 。FilterInputStream就是一个装饰者类。

“缺点”:利用装饰者模式常常造成设计中有大量的小类,数量实在太多了,可能造成使用此API程序员的困扰。但是,当了解到装饰者的工作原理,以后使用别人大量装饰的API时,就可以很容易地辨别出它们的装饰者类是如何组织的,以方便包装方式取得想要的行为。

初次接触java i/o类库,往往无法轻易理解它。但是一旦认识到这些类都是用来包装InputStream的,一切都变得简单多了。


4.工厂模式(Simple Factory)

把new操作符替换成工厂对象的创建方法,不再具体实例化。

把产生对象的代码分离出来,这样其余的代码没有和具体的对象打交道,就可以对修改关闭了。而独立出来生产对象的工厂可以为很多的类服务!不仅仅是刚才那个。

工厂方法用来处理对象的创建,并将这样的行为封装在子类中。这样,客户程序中关于超类的代码就和子类对象创建代码解耦了。



只有注册用户登录后才能发表评论。


网站导航: