桥梁模式

1.定义

桥梁(Bridge)模式 标准定义: 将抽象部分与它的实现部分分离,使它们都可以独立地变化。

桥梁模式

2.实现

桥梁(Bridge)模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化.

桥梁模式

  • 抽象化(Abstraction)角色: 定义抽象类的接口,维护一个指向Implemcntor类型对象的指针.
  • 修正抽象化(Refine Abstraction)角色: 扩充由Abstraction定义的接口,Implementor定义实现类的接口.
  • 实现化(Implementor)角色: 仅提供基本操作.这个抽象类规范具体实现化角色,规定出具体实现化角色当有的(非私有)方法和属性.
  • 具体实现化(Concrete Implementor)角色: 实现Implementor接口并定义它的具体实现.
/**
 * AbstractAction
 * 实现化(Implementor)角色
 */
public abstract class AbstractAction {

    public void doAction(String depart, String title) {
        if (depart.length() == 0){
            System.out.println("这是部门的标准工作活动");
        }
        System.out.println("这是" + depart + "部门的标准工作活动," + "主题是" + title);
    }
}

/**
 * AbstractDepartment
 * 抽象化(Abstraction)角色
 */
public abstract class AbstractDepartment {

    AbstractAction departAction;

    void setAbstractAction(AbstractAction action) {
        departAction = action;
    }

    public void action(String title) {
        departAction.doAction("", title);
    }
}

/**
 * DevelopmentDep,FinanceDep,Meeting 
 * 具体实现化(Concrete Implementor)角色
 */
public class DevelopmentDep extends AbstractDepartment {

    @Override
    public void action(String title) {
        String departName = "开发部";
        departAction.doAction(departName, title);
    }
}

public class FinanceDep extends AbstractDepartment {

    @Override
    public void action(String title) {
        String departName = "财务部";
        departAction.doAction(departName, title);
    }
}

public class Meeting extends AbstractAction {

    @Override
    public void doAction(String depart, String title) {
        if (depart.length() == 0) {
            System.out.println("这是部门的会议工作活动");
        }
        System.out.println("这是" + depart + "会议工作活动," + "主题是" + title);
    }
}

客户端

public class BridgeClient {

    public static void main(String[] args) {
        AbstractAction action = new Meeting();
        AbstractDepartment depart = new DevelopmentDep();
        depart.setAbstractAction(action);
        depart.action("提高开发技能");

        action = new Meeting();
        depart = new FinanceDep();
        depart.setAbstractAction(action);
        depart.action("检查会计制度");

        // out
        // 这是开发部会议工作活动,主题是提高开发技能
        // 这是财务部会议工作活动,主题是检查会计制度
    }
}

3.扩展

JDK中的AWT就是采用的桥梁模式实现.

Component是提供给开发人员对窗体界面系统的抽象,代表图形用户界面中的一个控件,对于事件响应的处理,在Component类中有ComponentEvent属性.但是,在具体实现中,针对不同的Component类型,有着不同Event事件响应.例如,如果你使用AWT创建了一个Window类的实例,那么在程序运行时会创建一个窗口的实例,而由窗口实例会产生WindowEvent响应.不同的组件,有不同的事件响应实现.所以,作为Component有自己的一套继承体系,而Event事件响应也有对应的继承体系.而Component通过关联Event把这两者结合起来,形成这种一一映射关系. JDK中Component和ComponentEvent桥梁类结构图

实际上,从设计的角度来看,这是一个抽象和实现分离的过程.Component和ComponentEvent是抽象,Container和ContainerEvent是具体实现,抽象和实现各自成为一个对象体系,它们由一个桥连接起来,可以各自发展各自的对象层次,而不必顾虑另一方面.这就是Bridge模式所提供的思想.

results matching ""

    No results matching ""