关于java:桥接模式

将形象和具体实现拆散,通过抽象类来关联其具体实现,缩小类之间的耦合。

上面通过一个车厂和汽车品牌的实例来实现桥接模式

汽车品牌的形象 接口 外面申明一个获取汽车品牌的办法

public interface Brand {
    String brandName();
}

车厂抽象类 其中会组合汽车品牌的形象 外面申明一个输入汽车信息的形象办法

public abstract class Depot {
    Brand brand;

    public void setBrand(Brand brand) {
        this.brand = brand;
    }

    public abstract void message();
}

汽车品牌的具体实现,咱们减少丰田、福特两个品牌

public class Toyota implements Brand{
    private final String name = "丰田";

    @Override
    public String brandName() {
        return name;
    }
}

public class Ford implements Brand{
    private final String name = "福特";

    @Override
    public String brandName() {
        return name;
    }
}

汽车厂的两个具体实现,减少一汽、上汽两个车厂类

public class FAWDepot extends Depot{
    @Override
    public void message() {
        System.out.println("一汽汽车厂生产的"+super.brand.brandName());
    }
}

public class SAICDepot extends Depot{
    @Override
    public void message() {
        System.out.println("上汽汽车厂生产的"+super.brand.brandName());
    }
}

测试类

public class BridgeTest {
    @Test
    public void test(){
        Depot faw = new FAWDepot();
        faw.setBrand(new Ford());
        faw.message();

        Depot saic = new SAICDepot();
        saic.setBrand(new Toyota());
        saic.message();
    }
}
====后果====
一汽汽车厂生产的福特
上汽汽车厂生产的丰田

咱们能够下面的实现中发现,只有在Depot中援用了Brand,这两个类(接口)都是形象层面的实现,没有具体到某一车厂和具体品牌,而后就能够在客户端中通过两个抽象类建设的“桥”去组合,Depot的具体实现类和Brand的具体实现类。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理