桥接模式

88 阅读1分钟
/**
 * 桥接模式
 * 个人理解:1.为了解决单继承问题,将两个维度的问题拆分,一个维度用接口实现,另一个维度用抽象类实现
 *  2.抽象类依赖于接口类,构造器传入接口类的实现类。
 *  3.抽象类的实现类中实现方法调用接口方法
 * 组件:接口类(一个维度,本例中Country)、接口实现类(接口的实现类,本例中China、USA)、
 *  抽象类(依赖于接口类,本例中Sport)、抽象实现类(抽象类的实现类,本例中BasketBall、PingPangBall)、客户类(Client)
 */
public class BridgeDesignPattern {

    public static void main(String[] args) {
        // (不同国家的人)奥运会,(不同运动)获得金牌
        Sport pingPangBall = new PingPangBall(new China());
        Sport basketBall = new BasketBall(new USA());

        pingPangBall.win();
        basketBall.win();
    }

}

interface Country {
    String countryName();
}

class China implements Country {

    @Override
    public String countryName() {
        return "中国";
    }
}

class USA implements Country {

    @Override
    public String countryName() {
        return "美国";
    }
}

abstract class Sport {

    protected Country country;

    public Sport(Country country) {
        this.country = country;
    }

    abstract void win();

}

class BasketBall extends Sport {

    public BasketBall(Country country) {
        super(country);
    }

    @Override
    void win() {
        System.out.println("东京奥运会," + country.countryName() + "在篮球项目获得了金牌");
    }
}

class PingPangBall extends Sport {

    public PingPangBall(Country country) {
        super(country);
    }

    @Override
    void win() {
        System.out.println("东京奥运会," + country.countryName() + "在乒乓球项目获得了金牌");
    }
}