已知顺丰快递既可以发陆运,也可以发空运;EMS只能发空运,圆通只能发陆运。 小明现在发送快递,为其设计两个方法,分别用来发空运和陆运。

本文介绍了一种基于设计模式的快递公司运输方式实现。通过定义ExpressDelivery父类和AirTransport、LandTransport接口,实现了顺丰、EMS和圆通等快递公司的空运和陆运功能。顺丰同时支持空运和陆运,EMS仅支持空运,圆通仅支持陆运。
首先顺丰,EMS,圆通都是快递公司,他们都有一个共同的属性,就是快递公司名字,因此抽象出一个共同的父类叫ExpressDelivery;
另外,空运和陆运都是一种行为,是不同的两种行为,因此定义两个接口来记录这两种行为。顺丰即可陆运,也可空运,因此两种接口都继承;EMS只能空运,因此只继承空运的接口,圆通只能发陆运,因此只继承陆运的接口。

public class work05 {
    public static void main(String[] args) {
        //1.实例化一个人对象
        Person xiaoming=new Person("xiaoming");
        //2.实例化顺丰对象
        SF sf=new SF();
        //实例化圆通对象
        YTO yto=new YTO();
        //实例化EMS对象
        EMS ems=new EMS();
        //空运用顺丰
        xiaoming.sendByAirTransportation(sf);
        //陆运用顺丰
        xiaoming.sendByLandTransportation(sf);
        //空运用EMS
        xiaoming.sendByAirTransportation(ems);
        //陆运用圆通
        xiaoming.sendByLandTransportation(yto);
    }
}
class Person{
    String name;
    public Person() {
    }

    public Person(String name) {
        this.name = name;
    }
    //定义空运方法
    public void sendByAirTransportation(AirTransport airTransport){
        show();
        airTransport.AirTransportation();
    }
    //定义陆运方法
    public void sendByLandTransportation(LandTransport landTransport){
        show();
        landTransport.LandTransportation();

    }
    public String getName() {
        return name;
    }
    public void show(){
        System.out.print(toString());
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                '}';
    }
}
//圆通陆运
class YTO extends ExpressDelivery implements LandTransport{
    public YTO(){
        this.setName("圆通");
    }
    @Override
    public void LandTransportation() {
        System.out.println(this.getName()+"陆运");
    }
}
//EMS 空运
class EMS extends ExpressDelivery implements AirTransport{
    public EMS(){
        this.setName("EMS");

    }    @Override
    public void AirTransportation() {
        System.out.println(this.getName()+"空运");
    }
}
//顺丰既可以空运也可以陆运
class SF extends ExpressDelivery implements AirTransport,LandTransport{

    public SF(){
        this.setName("顺丰");

    }    @Override
    public void AirTransportation() {
        System.out.println(this.getName()+"空运");
    }

    @Override
    public void LandTransportation() {
        System.out.println(this.getName()+"陆运");
    }
}
//定义空运接口
interface AirTransport  {
    //定义空运方法
    void AirTransportation();
}
//定义陆运接口
interface LandTransport{
    //定义陆运方法
    void LandTransportation();
}
class ExpressDelivery {
    //定义快递名称
    String name;
    //无参构造
    public ExpressDelivery() {
    }
    //带一个参数的构造方法
    public ExpressDelivery(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "ExpressDelivery{" +
                "name='" + name + '\'' +
                '}';
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值