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

    前言

      1、合成/聚合复用原则,尽量使用使用合成/聚合,尽量不要使用类继承。

      2、合成和聚合都是关联的特殊种类。

      聚合表示弱的 ‘拥有’  关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;

      合成表示是一种强的‘拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。

      3、桥接模式,将抽象部分与它的实现部分分离,使它们都可以独立地变化。

      什么是抽象与它的实现分离,这并不是说,让抽象类与其派生类分离,因为这没有任何意义。实现指的是抽象类和它的派生类用来实现自己的对象。

    一、手机软件抽象类

      

    1     //手机软件
    2     public abstract class App
    3     {
    4         public abstract void Run();
    5     }

    二、具体的手机软件

      

    1     public class Game : App
    2     {
    3         public override void Run()
    4         {
    5             Console.WriteLine("王者荣耀");
    6 
    7         }
    8     }
    1     public class Message : App
    2     {
    3         public override void Run()
    4         {
    5             Console.WriteLine("短信");
    6         }
    7     }

    三、手机品牌抽象类

      

     1     //手机品牌抽象类
     2     public abstract class Brand
     3     {
     4         protected App soft;
     5         public void SetApp(App soft)
     6         {
     7             this.soft = soft;
     8         }
     9         public abstract void Run();
    10     }

    四、具体的手机品牌

      

     1     //华为手机
     2     public class Brandhuawei : Brand
     3     {
     4         public Brandhuawei()
     5         {
     6             Console.WriteLine("华为手机");
     7         }
     8         public override void Run()
     9         {
    10             soft.Run();
    11         }
    12     }
     1     //小米手机
     2     public class BrandMI : Brand
     3     {
     4         public BrandMI()
     5         {
     6             Console.WriteLine("小米手机");
     7         }
     8         public override void Run()
     9         {
    10             soft.Run();
    11         }
    12     }

    五、客户端

      

     1     class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             Brand b;
     6             b= new Brandhuawei();
     7             b.SetApp(new Game());
     8             b.Run();
     9             b.SetApp(new Message());
    10             b.Run();
    11 
    12             b = new BrandMI();
    13             b.SetApp(new Game());
    14             b.Run();
    15             b.SetApp(new Message());
    16             b.Run();
    17 
    18 
    19             Console.ReadKey();
    20         }
    21     }

    总结

      1、合成/聚合复用原则的好处是:优先使用对象的合成/聚合有助于保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞大的类。

      2、实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种对角度分离出来让他们独立变化,减少它们之间耦合。

      参考书籍:大话设计模式

  • 相关阅读:
    前端总结数据结构与算法基础
    Linux 常用命令
    mariadb下载二进制包源码包地址(使用清华)
    centos7添加永久静态路由
    登录普通用户会报错-bash: ulimit: open files: cannot modify limit: Operation not permitted
    编写二进制安装mariadb10.2的ansible-playbook剧本
    su
    URL后面加不加“/”有区别吗?
    RocketMQ在面试中那些常见问题及答案+汇总
    通过实现网站访问计数器带你理解 轻量级锁CAS原理,还学不会算我输!!!
  • 原文地址:https://www.cnblogs.com/hyunbar/p/9969293.html
Copyright © 2011-2022 走看看