设计模式之桥接模式

一.桥接模式

桥接模式定义:桥接模式即将抽象部分和实现部分分离,使其可以独立变化。

桥接模式将继承关系转为关联关系,降低了类与类之间的耦合。

抽象化:将复杂物理体中一个或多个特征抽取而出,而注重其他过程的行动或过程。

实现化:是与抽象化给出具体过程,是与抽象化为互逆关系。

脱耦合:将抽象化和实现化的过程解耦合,将他们之间的强关联转为弱关联关系。

二.模式结构

桥接模式主要包含如下几个角色

Abstraction 抽象类

RefinedAbstraction 扩充抽象类

Implementor 实现类接口

ConcreteImplementor具体实现类

三.模式实现

现在存在这样一个应用场景.一个公司的人员存在两种维度

一种维度是公司内的职务,另外就是党内职务

职务维度:董事长,办公室主任

党内职务维度:纪检委员,党支部书记,调查员

职务维度---->党内职务维度存在1对n的情况

所以对于职务存在更高维度上的抽象,党内职务相对简单。

抽象层面的党内职务PartPost

public abstract class PartyPost {
    public abstract void  Task();
}

抽象层面的职务,职务可以1对n党内职务.

import java.util.ArrayList;

//职务
public abstract class Position {

    private String PositionName =null;

    private ArrayList<PartyPost> PartyPosts =new ArrayList(); //党内职位

    public Position(String positionName) {
        PositionName = positionName;
    }

    public void Appointment(PartyPost partyPost){
        PartyPosts.add(partyPost);
    }
    public String getPositionName() {
        return PositionName;
    }

    public void setPositionName(String positionName) {
        PositionName = positionName;
    }

    public void Work(){
        System.out.println(PositionName+"时刻准备为人民服务!");

        for (PartyPost post: PartyPosts) {
            post.Task();
        }
    }

}

扩充的抽象类: 董事长是职务具体位置

public class Chairman extends Position {

    public Chairman(String positionName) {
        super(positionName);
    }
}

扩充的抽象类: 项目经理是职务具体位置

public class ProjectManager extends Position{

    public ProjectManager(String positionName) {
        super(positionName);
    }
}

实现类结构:党内职务的调研员

public class Invoker extends PartyPost {
    @Override
    public void Task() {
        System.out.println("调用基层的大好形势");
    }
}

实现类结构:党内职务的的党支部书记

public class Secretary extends PartyPost {
    @Override
    public void Task() {
        System.out.println("主持调用工作,协调各办事员的关系!");
    }
}

实现类结构:党内职务的的纪检委员

//纪检委员
public class CommitteeMember extends PartyPost {

    @Override
    public void Task() {
        System.out.println("防止腐败并且预防腐败的发生!");
    }
}

四.该模式的优点

1.分离抽象接口和具体实现部分,提供了比继承更好的解决方案

2.桥接模式提高系统的可扩展性

3.具体实现细节对用户隐藏

缺点

1.增加系统的理解难度

2.桥接模式需要正确的认识两种维度的抽象关系

五.应用场景

1.系统中需要定义抽象角色和具体实现角色更灵活

2.对于不希望通过继承实现类数量剧增的而言,有更好的实现思路

原文地址:https://www.cnblogs.com/ad-zhou/p/11734446.html