桥接模式

前言

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

  参考书籍:大话设计模式

原文地址:https://www.cnblogs.com/hyunbar/p/9969293.html