`

策略模式(From:Head First设计模式)

 
阅读更多

策略模式(Strategy Pattern)

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

可怕的问题

对代码所做的局部修改,影响层面可不是局部(会飞的橡皮鸭)

怎么办?

采用良好的OO软件设计原则。

设计原则(第一个设计原则)

找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。

换句话说,如果每次新的需求一来,都会使某方面的代码发生变化,那么可以确定这部分代码需要抽取出来。——代码变化引起的不经意后果变少,系统变得更有弹性。

设计原则

针对接口编程,而不是针对实现编程

针对实现编程:

// 声明变量dDog类型(是Animal的具体实现),会造成我们必须针对具体实现编码

Dog d = new Dog();

d.bark();

针对接口/超类编程:

// 知道对象时狗,但是利用animal进行多态的调用

Animal animal = new Dog()

Animal.makeSound();

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

// 我们不知道实际的子类型是“什么”….我们只关心它如何正确地进行makeSound()的动作就可以了。

a = getAnimal();

a.makeSound();

设计原则

多用组合,少用继承。

 

设计模式让你和其他开发人员之间有共享的词汇,一旦懂得这些词汇,和其他开发人员之间沟通就很容易,也会促使哪些不懂的程序员想开始学习设计模式。设计模式也可以把你的思考架构的层次提高到模式层面,而不是仅停留在琐碎的对象上。

设计模式不会直接进入你的代码中,而是先进入进的“大脑”中,一旦你现在脑海中装入许多关于模式的知识,就能够开始在新设计中采用它们,并当你的旧代码变得如同搅和一团没有弹性的时候,可以用他们重构代码。

知道抽象、继承、多态这些概念,并不会马上变成好的面向对象设计者。设计大师关心的是建立弹性的设计,可以维护,可以应付变化。



 

  • 大小: 2.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics