首页 > 其他 > 详细

策略模式

时间:2017-04-26 18:38:24      阅读:164      评论:0      收藏:0      [点我收藏+]

策略模式定义:

分别封装行为接口,实现算法集合,超类存放行为接口对象,子类设置行为对象实现对象。

原则:

分离变化部分,封装为接口,基于接口编程,将行为算法独立出行为使用者

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();
    }

}

 

策略模式

原文:http://www.cnblogs.com/zhuangxr/p/6770055.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!