桥接模式
前言
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、实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种对角度分离出来让他们独立变化,减少它们之间耦合。
参考书籍:大话设计模式