设计模式之桥接模式
一.桥接模式
桥接模式定义:桥接模式即将抽象部分和实现部分分离,使其可以独立变化。
桥接模式将继承关系转为关联关系,降低了类与类之间的耦合。
抽象化:将复杂物理体中一个或多个特征抽取而出,而注重其他过程的行动或过程。
实现化:是与抽象化给出具体过程,是与抽象化为互逆关系。
脱耦合:将抽象化和实现化的过程解耦合,将他们之间的强关联转为弱关联关系。
二.模式结构
桥接模式主要包含如下几个角色
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.对于不希望通过继承实现类数量剧增的而言,有更好的实现思路
恐惧源于无知,代码改变世界