zoukankan      html  css  js  c++  java
  • 设计模式之桥接模式

    一.桥接模式

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

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

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

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

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

    二.模式结构

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

    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.对于不希望通过继承实现类数量剧增的而言,有更好的实现思路

  • 相关阅读:
    打标签tag
    高阶函数
    anywhere执行时端口被占用Address already in use:8080解决方法
    时间戳常见转化
    generator(生成器)
    Promise详解(转载)
    在手机上预览自己的本地h5页面
    箭头函数中的this
    扩展运算符
    38.线程
  • 原文地址:https://www.cnblogs.com/ad-zhou/p/11734446.html
Copyright © 2011-2022 走看看