策略模式

五一去旅游为例:

五一大家都去旅游,大家都选择不一样的出行方式。如:火车(K,G),飞机,汽车等。人也不一样,有Rich,Middle,Poor等三类人。

人(People):拥有去旅行的方法,如:go(String ticket);需要选择出行的方式:TripMode。

出行方式(TripMode):出行方式是独立的,所以定义成接口。不管如何出行,都需要这几个方法,买票(buyTicket),改签(meal),退票(refundTicket)等。

类图:
这里写图片描述
下面是代码:

TripMode接口

 public interface TripMode {//出行方式
    public String buyTicket(String from,String to);//买票

    public String meal(String ticket,String oldData,String newData);//改签

    public void refundTicket(String ticket);//退票
}

TripMode接口的实现类

public abstract class  Train implements TripMode {//火车

}
public class KTrain extends Train {//K字头火车
    @Override
    public String buyTicket(String from, String to) {
        return "已购票成功,车票信息:KXXX次列车,列车从"+from+"出发,开往"+to+",旅途开始";
    }

    @Override
    public String meal(String ticket, String oldData, String newData) {
        return "车票已改签,车票信息:KXXX次列车,出发时间由"+oldData+"改为"+newData+"";
    }

    @Override
    public void refundTicket(String ticket) {
        Log.e("zhang", "车票信息:KXXX次列车,已退票成功");
    }
}
public class GTrain extends Train {//高铁
    @Override
    public String buyTicket(String from, String to) {
        return "已购票成功,车次信息:GXXX次列车,本列车从"+from+"出发,开往"+to+",旅途开始";
    }

    @Override
    public String meal(String ticket, String oldData, String newData) {
        return "车票已改签,车次信息:GXXX次列车,出发时间由"+oldData+"改为"+newData+"";
    }

    @Override
    public void refundTicket(String ticket) {
        Log.e("zhang", "车次信息:GXXX次列车,已退票成功");
    }
}
public class Automobile implements TripMode {//汽车
    @Override
    public String buyTicket(String from, String to) {
        return "已购票成功,车票信息:XXX汽车,从"+from+"出发,开往"+to+",旅途开始";
    }

    @Override
    public String meal(String ticket, String oldData, String newData) {
        return "车票已改签,车票信息:XXX汽车,出发时间由"+oldData+"改为"+newData+"";
    }

    @Override
    public void refundTicket(String ticket) {
        Log.e("zhang", "车票信息:XXX汽车,已退票成功");
    }
}
public class Aircraft implements TripMode{//飞机
    @Override
    public String buyTicket(String from, String to) {
        return "已购票成功,机票信息:XXX航班,从"+from+"出发,飞往"+to+",旅途开始";
    }

    @Override
    public String meal(String ticket, String oldData, String newData) {
        return "机票已改签,机票信息:XXX航班,出发时间由"+oldData+"改为"+newData+"";
    }

    @Override
    public void refundTicket(String ticket) {
        Log.e("zhang", "机票信息:XXX航班,已退票成功");
    }
}

People抽象类

public abstract class People {

    protected TripMode mode;//出行方式

    public People() {
        mode = new KTrain();//默认做K字头火车
    }

    public abstract void go(String ticket);//每个人都有去旅行的方法

    public TripMode getMode() {
        return mode;
    }

    public void setMode(TripMode mode) {
        this.mode = mode;
    }

    public String buyTicket(String from, String to) {//代理的方式,调用买票的方法
        if (null != mode && !TextUtils.isEmpty(from) && !TextUtils.isEmpty(to)) {
            return mode.buyTicket(from, to);
        }
        return null;
    }

    public String meal(String ticket, String oldData, String newData) {//代理的方式,调用买票的方法
        if (null != mode && !TextUtils.isEmpty(ticket) && !TextUtils.isEmpty(oldData) && !TextUtils.isEmpty(newData)) {
            return mode.meal(ticket, oldData, newData);
        }
        return null;
    }

    public void refundTicket(String ticket) {//代理的方式,调用买票的方法
        if (null != mode && !TextUtils.isEmpty(ticket)) {
            mode.refundTicket(ticket);
        }
    }
}

People的实现类

public class RichPeople extends People {

    @Override
    public void go(String ticket) {
        Log.e("zhang", "我是土豪,"+ticket);
    }
}
public class MiddlePeople extends People {

    @Override
    public void go(String ticket) {
        Log.e("zhang", "我是MiddlePeople,"+ticket);
    }
}
public class PoorPeople extends People {

    @Override
    public void go(String ticket) {
        Log.e("zhang", "我是PoorPeople,"+ticket);
    }
}

代码入口(以android的MainActivity为入口):

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        init();
    }

    private void init() {
        People people = new RichPeople();
        people.setMode(new Aircraft());
        String ticket = people.buyTicket("上海", "马尔代夫");
        ticket = people.meal(ticket, "上午9点", "下午2点");
        people.go(ticket);

        people = new MiddlePeople();
        people.setMode(new GTrain());
        String ticket1 = people.buyTicket("上海", "海口");
        people.go(ticket1);

        people = new PoorPeople();
        String ticket2 = people.buyTicket("上海", "杭州");
        ticket2 = people.meal(ticket2, "上午9点", "下午3点");
        people.refundTicket(ticket2);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值