首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

Head First 设计方式-Strategy

2012-09-04 
Head First 设计模式--Strategy本系列是我自己学习“Head First Design Pattern”一书的读书笔记和心得。将按

Head First 设计模式--Strategy

本系列是我自己学习“Head First Design Pattern”一书的读书笔记和心得。将按照每次一个Chapter的顺序进行记录。欢迎大家分享你的学习心得。

?

Chapter 1 --设计模式入门

?

1.? 对代码的局部修改,影响的层面不只是局部(会影响到子类的行为,出现“会飞的橡皮鸭”的情况)。所以,当涉及“维护”时,为了“复用”(reuse)目的而使用继承,结局并不完美。

2.? 因为Java接口不具有实现代码,所有继承接口无法达到代码的复用。这意味着:无论何时你需要修改某个行为,你必须得往下追踪并在每一个定义此行为的类中修改它,一不小心,可能会造成新的错误!

?

3. 设计模式致力于提高可维护性和可扩展性上的复用程度,是系统更有弹性。

?

?

本章使用SimuDuck的例子来说明以下来三个设计原则

?

(1)? 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
也就是说:把会变化的部分取出并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分。

?

(2)? 针对接口编程,而不是针对实现编程。

”针对接口编程“,关键就在多态。利用多态,程序可以针对超类型编程,执行时会根据实际状况执行到真正的行为,不会被绑死在超类型的行为上。

?

所谓针对接口编程和针对实现编程的区别如下:

?

a)? 针对实现编程

Dog d = new Dog( );d.bark( );

?

b)? 针对接口编程

Animal animal = new Dog( );animal.makeSound( );

?

更值得注意的是,子类实例化的动作不再需要在代码中硬编码,例如new Dog(),而是“在运行时才指定具体实现的对象”。

a = getAnimal( );a.makeSound( ); 

?

(3) 多用组合,少用继承?

使用组合建立系统具有很大的弹性,不仅可将算法族封装成类,更可以“在运行时动态地改变行为”,只要组合的行为对象符合正确的接口标准即可。

?

?

策略模式:

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

?

?

本章小结:

?

知道OO基础,并不足以让你设计出良好的OO系统。良好的OO设计必须具备可复用、可扩充、可维护三个特性。模式可以让我们建造出具有良好OO设计质量的系统。模式被认为是历经验证的OO设计经验模式不是代码,而是针对设计问题的通用解决方案。你可把它们应用到特定的应用中。模式不是被发明,而是被发现。大多数的模式和原则,都着眼于软件变化的主题。大多数的模式都允许系统局部改变独立于其他部分。我们常把系统中会变化的部分抽出来封装。模式让开发人员之间有共享的语言,能够最大化沟通的价值。

热点排行