Java设计模式之观察者模式(3)

public class FirstGun implements Weapon { @Override public void gun() { System.out.println("使用AWM狙击步枪。"); } }

public class SecondGun implements Weapon { @Override public void gun() { System.out.println("使用S12K霰弹枪。"); } }

(3)定义一个环境类(Contex),类中持有一个对公共接口的引用,以及相应的get、set方法、构造方法

public class Context { Weapon weapon; public Context(Weapon weapon) { //构造函数 super(); this.weapon = weapon; } public Weapon getWeapon() { //get方法 return weapon; } public void setWeapon(Weapon weapon) { //set方法 this.weapon = weapon; } public void gun() { weapon.gun(); } }

最后,客户端自由调用策略(我在枪林弹雨的战场上,切换武器,击毙敌人)

public class StrategyClient { public static void main(String[] args) { //使用构造函数默认选择一把AWM狙击步枪(一个策略) Context context=new Context(new FirstGun()); context.gun(); //使用get、set方法切换到S12K霰弹枪(切换策略)
     System.out.println("------右前方30米发现敌人------");
contex.set(new SecondGun()); context.gun();
} }

输出结果:

Java设计模式之观察者模式

5、策略模式,小结一下:

重点在于:给对象传入什么样的策略,就执行什么样的动作。

优点在于:可以轻易的扩展与改变策略,可以动态改变对象的行为。

缺点在于:客户端必须知道所有的策略类,并自行决定使用哪一种。每个具体的策略都会产生一个新类,这样会造成很多策略类。

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/c647589bef7eb606b8e43e392ae65d27.html