案例分析:设计模式与代码的结构特性(桥接模式)
基本介绍:
1)桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。
2)是一种结构型设计模式。
3)Bridge模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。
模式结构:
AbstractBike:抽象类
MountatinBike/RoadBike:扩充抽象类
InterfaceBrand:实现类接口
MeridaBrand/GiantBrand:具体实现类
案例分析:
典型实现类接口代码: public interface InterfaceBrand { public void showBrand(); } 典型的抽象类代码: public abstract class AbstractBike { InterfaceBrand brand;//自行车的品牌 String color;//自行车的颜色 public AbstractBike(InterfaceBrand brand, String color) { this.brand = brand; this.color = color; } public abstract void print(); } 典型的扩充抽象类代码: public class MountatinBike extends AbstractBike { public MountatinBike(InterfaceBrand brand, String color) { super( brand, color); } public void print(){ System.out.println("属性:山地车"); System.out.println("颜色:"+color); brand.showBrand(); System.out.println("---------------"); } } 典型的接口的实现的代码: public class GiantBrand implements InterfaceBrand { @Override public void showBrand() { System.out.println("-品牌:捷安特"); } }
模块抽象封装的方法:
在该场景中,如果要增加品牌的种类,只需要增加接口的实现即可,可扩展性强;如果增加车子种类(比如说旅行车、城市车),只需要增加抽象类的实现,实现了抽象和实现部分的分离。
引入该设计模式后对系统架构和代码结构带来了的好处:
实现了抽象和实现部分的分离,从而极大的提供了系统的灵活性,让抽象部分和实现部分独立开来,这有助于系统进行分层设计,从而产生更好的结构化系统。
对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了,其它的部分由具体业务来完成。
桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本。
其中用到的多态机制:
多态三个必要条件:继承、方法重写、父类引用指向子类对象。
本案例中RoadBike、MountatinBike继承父类(抽象类)AbstractBike,对父类方法print()进行重写。代码如下:
InterfaceBrand brand1=new GiantBrand(); InterfaceBrand brand2=new GiantBrand(); AbstractBike bike1=new MountatinBike(brand1,"黑色"); AbstractBike bike2=new RoadBike(brand1,"红色"); bike1.print(); bike2.print();
分析各个模块的内聚度和模块之间的耦合度:
桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程。
将抽象化与实现化解耦,使得二者可以独立变化,通过对象组合的方式,Bridge 模式把两个角色之间的继承关系改为了耦合的关系,从而使这两者可以从容自若的各自独立的变化,这是Bridge模式的本意,从而提高内聚度、降低藕合度。
源码链接: