浏览 2412 次
锁定老帖子 主题:设计模式之一——策略模式及实现
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-12-20
策略模式的好处在于你可以动态的改变对象的行为。 设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(c++z中可以用虚类),然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。下面是一个例子。 /* 这是一个表现僧人和道士的程序,僧人光头,使用棍子做武器,道士长小胡子,使用拂尘作武器 */ package strategy; //处理长相接口 interface LooksBehavier { public void display(); } //处理所使用的武器接口 interface WeaponBehavier { public void useWeapon(); } //角色基类 class Role { public int heght; //身高 public int sex; //性别 public WeaponBehavier weapon; //处理武器接口的实例 public LooksBehavier looks; //处理长相的接口的实例 public void display() //显示长相 { looks.display(); } public void weapon() //设置所使用的武器 { weapon.useWeapon(); } } //道士长相类,实现了长相接口 class TaoistBehavier implements LooksBehavier { public void display() //实现接口函数 { System.out.println("I'm a taolist with long white goatee"); } } //和尚长相类,实现了长相接口 class BonzeBehavier implements LooksBehavier { public void display() //实现接口函数 { System.out.println("I'm a Bonze with no hair"); } } //道士武器类,实现了处理武器接口 class TaoistWeapon implements WeaponBehavier { public void useWeapon() //实现了处理武器接口函数 { System.out.println("My weapon is horsetail whisk");; } } //和尚武器类,实现了处理武器接口 class BonzeWeapon implements WeaponBehavier { public void useWeapon() //实现了处理武器接口函数 { System.out.println("My weapon is truncheon");; } } //道士 class Taoist extends Role { public Taoist() { looks = new TaoistBehavier(); weapon = new TaoistWeapon(); } } //和尚 class Bonze extends Role { public Bonze() { looks = new BonzeBehavier(); weapon = new BonzeWeapon(); } public void changeWeapon() { weapon = new TaoistWeapon(); System.out.println("change weapon"); } } public class RoleBase{ public static void main(String [] arg) { Taoist taoistObj = new Taoist(); Bonze bonzeObj = new Bonze(); taoistObj.display(); taoistObj.weapon(); bonzeObj.display(); bonzeObj.weapon(); bonzeObj.changeWeapon(); //改变和尚使用的武器 bonzeObj.weapon(); } } 成功执行后的输出为: I'm a taolist with long white goatee My weapon is horsetail whisk I'm a Bonze with no hair My weapon is truncheon change weapon My weapon is horsetail whisk 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-01-21
一句话,找到变化并封装之。
|
|
返回顶楼 | |
发表时间:2008-01-22
设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(c++z中可以用虚类),然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。下面是一个例子。
楼主的上句话中的“在类中包含这个对象的实例”的类是哪个类呢。说的是不是不清楚呀。 |
|
返回顶楼 | |
发表时间:2008-03-12
实现接口的类
|
|
返回顶楼 | |