zoukankan      html  css  js  c++  java
  • 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     }
  • 相关阅读:
    494 Target Sum 目标和
    493 Reverse Pairs 翻转对
    492 Construct the Rectangle 构建矩形
    491 Increasing Subsequences 递增子序列
    488 Zuma Game 祖玛游戏
    486 Predict the Winner 预测赢家
    485 Max Consecutive Ones 最大连续1的个数
    483 Smallest Good Base
    Django Form组件
    Django Auth组件
  • 原文地址:https://www.cnblogs.com/saville/p/2803748.html
Copyright © 2011-2022 走看看