标签:main min 子类 extends 实现 ticket 技术 ice 接口
策略模式定义:
分别封装行为接口,实现算法集合,超类存放行为接口对象,子类设置行为对象实现对象。
原则:
分离变化部分,封装为接口,基于接口编程,将行为算法独立出行为使用者
UML图表示:
设计说明:
假设设计一个旅行的超类,其中每个人的旅行的交通工具是变化的,那么每个人的交通工具都不同可以分为几类,例如做飞机的,自驾游的,火车的,大巴的。每一类的业务逻辑都是一样的,此刻如果用简单的继承方式,每个人继承旅行Travel这个超类的话,那么将会出现代码不可重用,每个子类都必须重写toTravelPlace{}方法,代码无法实现重用,当然还有个问题,假设Travel超类,根据业务需要,需要增加一个方法,加上抽象buyInsurance()方法,为每次旅行购买保险,那么所有继承Travel类的之类都需要调整方法,而使用策略模式这种组合方式的话,可以很容易解决这个问题。
参考代码:
超类:
public abstract class Travel { public TravelStrategy myTravelStrategy; public void toTravelPlace() { myTravelStrategy.arrvie(); }; public void setTravelStrategy(TravelStrategy myTravelStrategy){ myTravelStrategy=myTravelStrategy; }; }
实现类:
public class XiaoMingTravel extends Travel { public XiaoMingTravel(){ myTravelStrategy=new CarTravel(); } }
策略接口类:
public interface TravelStrategy { public void arrvie(); }
策略实现类1:
public class AirTravel implements TravelStrategy { @Override public void arrvie() { System.out.println("Booking airline tickets"); } }
策略实现类2:
public class CarTravel implements TravelStrategy { @Override public void arrvie() { System.out.println("prepare a car!"); System.out.println("prepare a driving license!"); } }
测试类:
public class test { public static void main(String[] args) { XiaoMingTravel xmt = new XiaoMingTravel(); xmt.toTravelPlace(); // 可以基于父类暴漏的方法,随时更换方法 // xmt.setTravelStrategy(new AirTravel()); // xmt.toTravelPlace(); } }
标签:main min 子类 extends 实现 ticket 技术 ice 接口
原文地址:http://www.cnblogs.com/zhuangxr/p/6770055.html