桥接模式

243 阅读2分钟

桥接模式的应用场景

官方点的话来说对象那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统。在我理解看来系统在类的美观性和数量在做出的妥协,一个产品分为上下双层次的时候,常规实现方式是通过多接口多继承的方式来实现,常常会造成类的数量急剧增加,扩展性还好,但是会造成大量的代码重复。但是桥接模式通过分离出其中下级层的接口与实现方式,在上层来引用下级层,从而来实现桥接模式。桥接模式在扩展方面也是极为出色的。我们先看实现桥接模式的代码再来讨论他的优缺点。

代码实现

// 下级层的分类接口
public interface IChicken {
    public String eat();
}
// 实现类
public class ChinaChicken implements IChicken {
    @Override
    public String eat() {
        return "白斩鸡";
    }
}
// 实现类2
public class OtherCountryChicken implements IChicken {
    @Override
    public String eat() {
        return "肯不起";
    }
}
// 桥接接口层 (桥接模式核心)
public abstract class Chicken {

    private IChicken iChicken;

    public Chicken(IChicken iChicken) {
        this.iChicken = iChicken;
    }

    protected String eat() {
        return this.iChicken.eat();
    }
}
// 桥接接口实现类
public class BlackChicken extends Chicken {

    public BlackChicken(IChicken iChicken) {
        super(iChicken);
    }

    public String eat() {
        return "乌骨鸡"+super.eat();
    }
}
// 桥接接口再分类
public class WhiteChicken extends Chicken {

    public WhiteChicken(IChicken iChicken) {
        super(iChicken);
    }

    public String eat() {
        return "白羽鸡"+super.eat();
    }
}

好了我们测试一下

public class BridgeTest {

    public static void main(String[] args) {

        Chicken chicken = new WhiteChicken(new ChinaChicken());
        System.out.println(chicken.eat());

        Chicken chicken1 = new BlackChicken(new OtherCountryChicken());
        System.out.println(chicken1.eat());
    }
}
白羽鸡白斩鸡
乌骨鸡肯不起

Process finished with exit code 0

总结

大家可以看出桥接模式将产品分成了两个维度,桥接通过聚合来使用两个维度,在扩展性方面有着优于常规实现的表现。常规模式实现大概思路就是定义产品,然后产品再继承实现多种类型,类型下再分类型,由此可以想象出类的成倍增加的样子。可以敲一敲代码来感受一下。

详细代码下载:github.com/Liyinzuo/De…

以上便是桥接模式的介绍和实现方式,如果有错误或者不足的地方欢迎指正。