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

OO设计形式笔记01—策略模式

2012-12-24 
OO设计模式笔记01—策略模式OO设计模式—策略模式设计原则tip1:找出应用中可能需要变化之处,把它们独立出来,

OO设计模式笔记01—策略模式
OO设计模式—策略模式

设计原则tip1:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

如果每次新的需求依赖,都会使某方面的代码发生变化,那么你就可以确定,这部分的代码需要被抽出来,和其他稳定的代码有所区分。

考虑一个个经典的例子
Duck类中有fly和quack两种行为,但是不同的鸭子有不同的fly和quack行为。为了要把这个行为从Duck类中分开,我们将把他们从Duck类中取出来,建立一组新类来代表每个行为。

设计原则tip2:针对接口编程,而不是针对实现编程。这里的接口可以理解为接口interface或是抽象类。

在上面的问题中,我们利用接口代表每个行为,比方说,FlyBehavior与QuackBehavior,而行为的每个实现都将实现其中的一个借口。

这次鸭子类不会负责实现Flying与Quacking接口,反而是由我们实现FlyBehavior与QuackBehavior,这就称为“行为”类。由行为类来实现接口。

看以下代码:
Duck类

public class MallardDuck extends Duck {public MallardDuck(){quackBehavior = new Quack();flyBehavior = new FlyingWithWings();}public void display(){System.out.println("I am a real mallard duck");}}public class MuteDuck extends Duck{public MuteDuck(){flyBehavior = new FlyingNoWay();quackBehavior = new Quack();}public void display(){System.out.println("I am a Mute Duck");}}public class MiniDuckSimu {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubDuck mallard = new MallardDuck();mallard.performFly();mallard.performQuack();Duck Mute = new MuteDuck();Mute.performFly();Mute.performQuack();}}

如果需要添加飞行方式只需要定义新的行为类来实现飞行接口。

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

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

热点排行