Heim  >  Artikel  >  Backend-Entwicklung  >  .NET-Bridge-Modus erklärt

.NET-Bridge-Modus erklärt

高洛峰
高洛峰Original
2016-12-20 12:57:241454Durchsuche

Definition des Bridge-Modus:

Entkoppelt die Abstraktion von der Implementierung, sodass sie sich unabhängig voneinander ändern können.

Strukturdiagramm des Bridge-Modus:

.NET-Bridge-Modus erklärt

Rollen im Bridge-Modus:

Abstraktionsrolle: durch Abstraktion gegeben Definieren und speichern Sie einen Verweis auf materialisiertes Objekt.
Verfeinerte Abstraktionsrolle: Erweitern Sie die Abstraktionsrolle, ändern und modifizieren Sie die Definition der Abstraktion durch die übergeordnete Klasse.
Implementiererrolle: Diese Rolle stellt eine Schnittstelle zum Implementieren der Rolle bereit, gibt jedoch keine spezifische Implementierung an. Es muss darauf hingewiesen werden, dass diese Schnittstelle nicht unbedingt mit der Schnittstellendefinition der abstrakten Rolle übereinstimmt. Tatsächlich können die beiden Schnittstellen sehr unterschiedlich sein. Implementierte Rollen sollten nur Vorgänge auf niedriger Ebene bereitstellen, während abstrakte Rollen nur Vorgänge auf niedrigerer Ebene bereitstellen sollten, die auf Vorgängen auf niedriger Ebene basieren.

Kombiniert mit Beispielen:

Zitat des Beispiels einer TV-Fernbedienung Für jede Fernbedienungsmarke gibt es eine entsprechende Fernbedienung, an die wir denken kann sein: Abstrakt eine Fernbedienungsschnittstelle, die eine Reihe zu implementierender Funktionsmethoden wie Einschalten, Ausschalten und Kanalwechsel enthält. Erstellen Sie dann eine bestimmte Fernbedienungsklasse, um diese Schnittstelle zu erben und die darin enthaltenen Methoden zu implementieren. Dadurch kann jedes Fernsehgerät seine eigene Fernbedienung implementieren. Für neue Fernsehgerätetypen müssen Sie lediglich eine abgeleitete Klasse hinzufügen, um die Ableitung der neuen Fernbedienung zu erfüllen. Wenn der Benutzer jedoch eines Tages das Hinzufügen einer Funktion anfordert, um zum vorherigen Kanal in der Fernbedienung zurückzukehren, muss die abstrakte Fernbedienungsschnittstelle geändert und der abstrakten Klasse eine neue Methode hinzugefügt werden, wodurch sich die Implementierung ändert der abstrakten Klasse. Wenn der Benutzer gleichzeitig das Produktverhalten des Fernsehgeräts und das Verhalten der Fernbedienung ändern möchte, führt dies zu großen Änderungen am oben genannten Design. Die Verwendung des Bridge-Modus kann diese Probleme sehr gut lösen.

Verwendung:

1. Abstrahieren Sie zunächst den Fernseher und stellen Sie eine Verhaltensmethode bereit, mit der die Fernbedienung geändert werden kann.

/// <summary>
/// 电视机,提供抽象方法
/// </summary>
public abstract class TV
{
 public abstract void On();
 public abstract void Off();
 public abstract void tuneChannel();
}

2. Erstellen Sie ein bestimmtes TV, geerbt aus der abstrakten TV-Klasse:

/// <summary>
/// 三星牌电视机,重写基类的抽象方法
/// </summary>
public class Samsung:TV
{
 public override void On()
 {
  Console.WriteLine("三星牌电视机已经打开了");
 }
 
 public override void Off()
 {
  Console.WriteLine("三星牌电视机已经关掉了");
 }
 
 public override void tuneChannel()
 {
  Console.WriteLine("三星牌电视机换频道");
 }
}
 
/// <summary>
/// 长虹牌电视机,重写基类的抽象方法
/// 提供具体的实现
/// </summary>
public class ChangHong : TV
{
 public override void On()
 {
  Console.WriteLine("长虹牌电视机已经打开了");
 }
 
 public override void Off()
 {
  Console.WriteLine("长虹牌电视机已经关掉了");
 }
 
 public override void tuneChannel()
 {
  Console.WriteLine("长虹牌电视机换频道");
 }
}

3. Abstrahieren Sie dann die Fernbedienung in der Übersicht und spielen Sie die Rolle abstrakter Wörter.

/// <summary>
/// 抽象概念中的遥控器,扮演抽象化角色
/// </summary>
public abstract class RemoteControl
{
 public TV implementor { get; set; }
 
 /// <summary>
 /// 开电视机
 /// 这里抽象类中不再提供实现了,而是调用实现类中的实现
 /// </summary>
 public virtual void On()
 {
  implementor.On();
 }
 
 /// <summary>
 /// 关电视机
 /// </summary>
 public virtual void Off()
 {
  implementor.Off();
 }
 
 /// <summary>
 /// 换频道
 /// </summary>
 public virtual void SetChannel()
 {
  implementor.tuneChannel();
 }
}

4. Erstellen Sie eine bestimmte Fernbedienungsklasse: Hier habe ich die Methode zum Kanalwechsel neu geschrieben. Tatsächlich können andere Methoden umgeschrieben werden.

/// <summary>
/// 具体遥控器类
/// </summary>
public class ConcreteRemote:RemoteControl
{
 /// <summary>
 /// 重写更换频道方法
 /// </summary>
 public override void SetChannel()
 {
  Console.WriteLine("重写更换频道方法");
  base.SetChannel();
 }
}

5. Rufen Sie an:

static void Main(string[] args)
  {
   // 创建一个遥控器
   RemoteControl remoteControl = new ConcreteRemote();
    
   //长虹电视机
   remoteControl.implementor = new ChangHong();
   remoteControl.On();
   remoteControl.SetChannel();
   remoteControl.Off();
   Console.WriteLine();
 
   // 三星牌电视机
   remoteControl.implementor = new Samsung();
   remoteControl.On();
   remoteControl.SetChannel();
   remoteControl.Off();
   Console.Read();
  }

So geht's Im Bridge-Modus-Design wird die Funktionsimplementierungsmethode der Fernbedienung nicht in der Fernbedienung implementiert, sondern der Implementierungsteil wird in einer anderen TV-Klasse verwendet, um sie zu kapseln. Die Fernbedienung enthält nur einen Verweis auf die TV-Klasse. Durch das Brückenmuster trennen wir die Abstraktions- und Implementierungsteile, sodass wir Änderungen in diesen beiden Aspekten besser bewältigen können.

Vorteile:

Die abstrakte Schnittstelle ist von ihrer Implementierung entkoppelt. Abstraktion und Implementierung können unabhängig voneinander erweitert werden, ohne sich gegenseitig zu beeinflussen.

Nachteile:

Erhöht die Komplexität des Systems.

Nutzungsszenarien:

1 Wenn ein System mehr Flexibilität zwischen der abstrakten Rolle und der konkreten Rolle von Komponenten hinzufügen muss, vermeiden Sie die Einrichtung einer statischen Beziehung zwischen den beiden Ebenen. Kontakt
2 Das Design erfordert, dass Änderungen an der implementierten Rolle keine Auswirkungen auf den Client haben oder dass Änderungen an der implementierten Rolle für den Client vollständig transparent sein sollten.
3. Grafik- und Fenstersysteme, die mehrere Plattformen umfassen müssen
4. Eine Klasse hat zwei unabhängig voneinander wechselnde Dimensionen, und beide Dimensionen müssen erweitert werden.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er zum Lernen aller beiträgt. Ich hoffe auch, dass jeder die PHP-Chinesisch-Website unterstützt.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn