Erläuterung des .NET-Dekorationsmodus
Definition des Dekorationsmodus:
Der Dekorationsmodus ist die Funktion, ein Objekt dynamisch zu erweitern, ohne die ursprüngliche Klassendatei zu ändern und Vererbung zu verwenden. Es umhüllt das reale Objekt, indem es ein Verpackungsobjekt, also eine Dekoration, erstellt.
Strukturdiagramm des Dekoratormusters:
Rolle des Dekoratormusters:
(1) Rolle der abstrakten Komponente (Komponente): gegeben Eine abstrakte Schnittstelle die Objekte spezifiziert, die bereit sind, zusätzliche Verantwortlichkeiten zu übernehmen.
(2) Rolle der konkreten Komponente: Definieren Sie eine Klasse, die zusätzliche Verantwortlichkeiten erhält.
(3) Dekorateurrolle: Enthält eine Instanz eines Komponentenobjekts und implementiert eine Schnittstelle, die mit der abstrakten Komponentenschnittstelle konsistent ist.
(4) Rolle des Betondekorateurs: Verantwortlich für das Hinzufügen zusätzlicher Verantwortlichkeiten zu Komponentenobjekten.
Umsetzung:
Anhand von Beispielen aus dem Leben kauften wir ein neues Mobiltelefon und fügten dem Telefon nach und nach neue Dekorationen wie Folien und Anhänger hinzu.... .
1. Abstrahieren Sie zunächst die Mobiltelefonklasse als abstrakte Komponente im Dekoratormuster:
/// <summary> /// 手机抽象类,即抽象者模式中的抽象组件类 /// </summary> public abstract class Phone { /// <summary> /// 打印方法 /// </summary> public abstract void Print(); }
2. Wenn wir jetzt ein Apple-Mobiltelefon gekauft haben, und jetzt erbt es von der abstrakten Klasse und implementiert die spezifische Komponentenklasse:
/// <summary> /// 苹果手机,即装饰着模式中的具体组件类 /// </summary> public class ApplePhone:Phone { /// <summary> /// 重写基类的方法 /// </summary> public override void Print() { Console.WriteLine("我有一部苹果手机"); } }
3. Jetzt möchte ich diesem Telefon zur Dekoration neue Komponenten hinzufügen , abstrahieren wir zunächst die Dekorationsklasse:
/// <summary> /// 装饰抽象类,让装饰完全取代抽象组件,所以必须继承Phone /// </summary> public abstract class Decorator:Phone { private Phone p ; //该装饰对象装饰到的Phone组件实体对象 public Decorator(Phone p) { this.p = p; } public override void Print() { if (this.p != null) { p.Print(); } } }
4. Das spezifische Dekorationsobjekt erbt die abstrakte Dekorationsklasse: Hier sind die spezifische Filmdekoration und die Anhängerdekoration :
/// <summary> /// 贴膜,具体装饰者 /// </summary> public class Sticker:Decorator { public Sticker(Phone p) : base(p) { } public override void Print() { base.Print(); //添加行为 AddSticker(); } /// <summary> /// 新的行为方法 /// </summary> public void AddSticker() { Console.WriteLine("现在苹果手机有贴膜了"); } }
/// <summary> /// 手机挂件,即具体装饰者 /// </summary> public class Accessories:Decorator { public Accessories(Phone p) : base(p) { } public override void Print() { base.Print(); // 添加新的行为 AddAccessories(); } /// <summary> /// 新的行为方法 /// </summary> public void AddAccessories() { Console.WriteLine("现在苹果手机有漂亮的挂件了"); } }
5. Aufruf:
/// <summary> /// 设计模式-装饰者模式 /// </summary> class Program { static void Main(string[] args) { Phone ap = new ApplePhone(); //新买了个苹果手机 Decorator aps = new Sticker(ap); //准备贴膜组件 aps.Print(); Decorator apa = new Accessories(ap); //过了几天新增了挂件组件 apa.Print(); Sticker s = new Sticker(ap); //准备贴膜组件 Accessories a = new Accessories(s);//同时准备挂件 a.Print(); } }
(1) Abstrakte Komponentenrolle: Geben Sie eine abstrakte Schnittstelle an die Objekte spezifiziert, die bereit sind, zusätzliche Verantwortlichkeiten zu übernehmen. >Hier ist die Telefonschnittstelle
(2) Rolle der konkreten Komponente: Definieren Sie eine Klasse, die zusätzliche Verantwortlichkeiten erhält. Applephone
(3) Dekorateur -Rolle: Hält eine Instanz eines Komponentenobjekts (Komponenten) und implementiert eine Schnittstelle, die mit der Schnittstelle zur abstrakten Komponenten übereinstimmt. >Bezieht sich auf Dekorateur
(4) Rolle des Betondekorateurs: Verantwortlich für das Hinzufügen zusätzlicher Verantwortlichkeiten zu Komponentenobjekten. >Bezieht sich auf Zubehör und Aufkleber
Vorteile:
1. Der Zweck des Decorator-Musters und der Vererbungsbeziehung besteht darin, die Funktionalität von Objekten zu erweitern, aber Decorator kann mehr Flexibilität bieten als die Vererbung.
2. Durch die Verwendung verschiedener spezifischer Dekorationsklassen und die Anordnung und Kombination dieser Dekorationsklassen können Designer viele Kombinationen unterschiedlicher Verhaltensweisen erstellen.
Nachteile:
1. Diese Funktion ist flexibler als die Vererbung und bedeutet auch mehr Komplexität.
2. Der Dekorationsmodus führt zu vielen kleinen Klassen im Design. Bei übermäßiger Nutzung wird das Programm sehr kompliziert.
3. Der Dekorationsmodus ist für die Programmierung abstrakter Komponenten (Komponenten) vorgesehen. Wenn Sie jedoch für bestimmte Komponenten programmieren, sollten Sie Ihre Anwendungsarchitektur überdenken und prüfen, ob Dekoratoren geeignet sind. Natürlich können Sie auch die Komponentenschnittstelle ändern, neue öffentliche Verhaltensweisen hinzufügen und den „transluzenten“ Dekoratormodus implementieren. Treffen Sie bei tatsächlichen Projekten die beste Wahl.
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.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

In diesem Artikel wird die Herausforderungen des Nullzeigers in C untersucht. Es argumentiert, dass das Problem nicht null selbst, sondern seinen Missbrauch ist. Der Artikel beschreibt Best Practices zur Verhinderung der Verhindern, einschließlich Vor-Dre-Dre-Dereferenz-Überprüfungen, Zeiger initiali

In diesem Artikel wird erläutert, wie Sie neue Zeilenzeichen in C mit der \ n Escape -Sequenz innerhalb von Printf erstellen und Funktionen setzt. Es beschreibt die Funktionalität und liefert Codebeispiele, die die Verwendung für Zeilenumbrüche in der Ausgabe demonstrieren.

Dieser Artikel führt Anfänger bei der Auswahl eines C -Compilers. Es wird argumentiert, dass GCC aufgrund seiner Benutzerfreundlichkeit, der breiten Verfügbarkeit und der umfangreichen Ressourcen für Anfänger am besten geeignet ist. Es wird jedoch auch GCC, Clang, MSVC und TCC vergleicht, wodurch ihre Unterschiede hervorgehoben werden

Dieser Artikel betont die anhaltende Bedeutung von NULL in der modernen C -Programmierung. Trotz Fortschritten bleibt NULL für die explizite Zeigerverwaltung von entscheidender Bedeutung und verhindert Segmentierungsfehler, indem das Fehlen einer gültigen Speicheradresse markiert wird. Bestes Prac

Dieser Artikel bewertet Online -C -Compiler für Anfänger, die sich auf die Benutzerfreundlichkeit und Debugging -Funktionen konzentrieren. OnlineGDB und Repl.it sind für ihre benutzerfreundlichen Schnittstellen und hilfreichen Debugging-Tools hervorgehoben. Andere Optionen wie Programmiz und Compil

Dieser Artikel vergleicht Online -C -Programmierplattformen und zeigt Unterschiede in Funktionen wie Debugging -Tools, IDE -Funktionalität, Standardkonformität und Speicher-/Ausführungsgrenzen. Es wird argumentiert, dass die "beste" Plattform von den Benutzerbedürfnissen abhängt.

In diesem Artikel werden effizientes Codekopieren in C -IDEs erläutert. Es wird betont, dass das Kopieren eine IDE -Funktion ist, keine Compiler -Funktion, und Details Strategien für eine verbesserte Effizienz, einschließlich der Verwendung von IDE -Auswahltools, Codefalten, Suchen/Ersetzen, Templa

In diesem Artikel wird die Ausgabefenster in der C -Programmkompilierung fehlt. Es werden Ursachen untersucht, wie das Ausführen der ausführbaren Datei, Programmfehler, falsche Compiler -Einstellungen, Hintergrundprozesse und schnelle Programmabschluss. Lösungen umfassen Ch
