zoukankan      html  css  js  c++  java
  • 9. 桥梁设计模式

    一.场景

    • 一个富翁手下有两个公司 , 1个服装公司生产服装 , 1个山寨公司生产当季热卖品的仿造品 (生产的产品时时变化) , 模拟富翁用这两家公司赚钱的过程

    这里写图片描述

    public static void main(String[] args){
      ClothesCorp cc = new ClothesCorp(); // 服装公司赚钱
      cc.makeMoney();
      ShanzhaiCorp sc = new ShanzhaiCorp(); // 山寨公司赚钱
      sc.makeMoney();
    }
    

    [衍化] : 因为山寨公司生产的产品不固定 , 于是把山寨公司生产的产品抽象出来 , 形成以下类图
    这里写图片描述

    public static void main(String[] args){
      House house = new House();
      Ipod ipod = new Ipod();
      new HouseCpro(house).makeMoney();
      new ShanzhaiCpro(ipod).makeMoney();   // 生产ipod的山寨公司
      new ShanzhaiCpro(house).makeMoney();  // 生产房子的山寨公司
    }
    

    二. 桥梁模式定义

    定义 : 将抽象和实现解耦 , 使两者可以独立的变化

    1. Abstraction : 抽象化角色 - 定义出该角色(Corp)的行为 , 同时持有对实现化角色的引用 (Product)
    2. Implementer : 实现化角色 - 定义该角色的行为和属性 (Product)
    3. RefinedAbstraction : 修正抽象化角色 - 引用实现化角色或其子类 , 作为对抽象化角色的修正 (HouseCorp,ShanzhaiCorp)
    4. ConcreteImplementor : 具体实现化角色 (House,Ipod)

    三 . 使用场景

    桥梁模式为了弥补继承的不足而产生 :

    1. 当继承层次过度无法更加细粒度设计场景需要使用桥梁模式 , 而不是继承
    2. 接口不稳定却想要通过继承,实现来实现业务需求得不偿失, 把不稳定的接口作为Implementer抽象出来(eg : ShanzhaiCorp的产品不固定 , 吧产品抽象出Product)
  • 相关阅读:
    Linux中的MyEclipse配置Hadoop
    C#学习笔记(三)
    关于读博,关于成为一个专家
    C#查找子串在原串中出现次数
    C#学习笔记(二)
    Matlab中sortrows函数解析
    C#学习笔记(一)
    甘特图与网络图
    ubuntu开启SSH服务
    分词错误重点分析这几项
  • 原文地址:https://www.cnblogs.com/72808ljup/p/5169372.html
Copyright © 2011-2022 走看看