• C#设计模式——桥接模式(Bridge Pattern)


    一、概述
    在软件开发中,我们有时候会遇上一个对象具有多个变化维度。比如对汽车对象来说,可能存在不同的汽车类型,如公共汽车、轿车等,也可能存在不同的发动机,如汽油发动机、柴油发动机等。对这类对象,可应用桥接模式来增强系统灵活度,避免由于多维度变化带来的复杂性。
    二、桥接模式
    桥接模式利用对象的组合关系将不同的变化维度分离,使其可以沿着各自的维度来变化。其结构图如下:

    Abstraction定义了抽象类,并包含Implementor对象。
    RefinedAbstraction实现了抽象类。
    Implementor定义了另一个变化维度。
    ConcreteImplementor提供了第二个变化维度接口的具体实现。
    三、示例
    我们利用桥接模式来实现前述的汽车对象
    首先定义Abstraction。

    复制代码
     1     public abstract class Car
     2     {
     3         public IEngine _engine;
     4 
     5         public Car(IEngine engine)
     6         {
     7             _engine = engine;
     8         }
     9 
    10         public virtual void Start()
    11         {
    12             _engine.Start();
    13         }
    14 
    15         public virtual void Stop()
    16         {
    17             _engine.Stop();
    18         }
    19     }
    复制代码

    接着实现不同的汽车类型。

    复制代码
     1     public class Bus : Car
     2     {
     3         public Bus(IEngine engine)
     4             : base(engine)
     5         {
     6         }
     7 
     8         public override void Start()
     9         {
    10             base.Start();
    11             Console.WriteLine("Bus Start");
    12         }
    13 
    14         public override void Stop()
    15         {
    16             base.Stop();
    17             Console.WriteLine("Bus Stop");
    18         }
    19     }
    20 
    21     public class Limousine : Car
    22     {
    23         public Limousine(IEngine engine)
    24             : base(engine)
    25         {
    26         }
    27 
    28         public override void Start()
    29         {
    30             base.Start();
    31             Console.WriteLine("Limousine Start");
    32         }
    33 
    34         public override void Stop()
    35         {
    36             base.Stop();
    37             Console.WriteLine("Limousine Stop");
    38         }
    39     }
    复制代码

    再定义第二个变化维度,即发动机的接口。

    1     public interface IEngine
    2     {
    3         void Start();
    4         void Stop();
    5     }

    最后实现不同的发动机。

    复制代码
     1     public class GasEngine : IEngine
     2     {
     3         public void Start()
     4         {
     5             Console.WriteLine("Gas Engine Start");
     6         }
     7 
     8         public void Stop()
     9         {
    10             Console.WriteLine("Gas Engine Stop");
    11         }
    12     }
    13 
    14     public class DieselEngine : IEngine
    15     {
    16         public void Start()
    17         {
    18             Console.WriteLine("Diesel Engine Start");
    19         }
    20 
    21         public void Stop()
    22         {
    23             Console.WriteLine("Diesel Engine Stop");
    24         }
    25     }
    复制代码
     
     
  • 相关阅读:
    11.分类与监督学习,朴素贝叶斯分类算法
    14 深度学习-卷积
    13-垃圾邮件分类2
    12.朴素贝叶斯-垃圾邮件分类
    9、主成分分析
    8、特征选择
    7.逻辑回归实践
    6.逻辑归回
    5.线性回归算法
    15 手写数字识别-小数据集
  • 原文地址:https://www.cnblogs.com/amylis_chen/p/6007930.html
Copyright © 2020-2023  润新知