


Strategiemodusdefinition:
definiert eine Familie von Algorithmen und kapselt sie separat, sodass sie untereinander ersetzt werden können. Dieser Modus ermöglicht, dass Änderungen am Algorithmus keine Auswirkungen auf die Kunden haben, die den Algorithmus verwenden.
Das Strategiemuster umfasst die folgenden Rollen:
Kontext: Umgebungsklasse
Strategie: Abstrakte Strategieklasse
ConcreteStrategy: Konkrete Strategieklasse
UML-Klassendiagramm:
Testfall
[code]int main(){ //商品费用 double cost; //采取某种收费策略之后的费用 double result; //假如 cost = 1029.88; //声明要使用的具体策略类 //这里显示出了策略类的缺点:客户端必须知道有哪些具体封装的算法。如本例必须知道三种收费方式Normal、Return、Rebate。 StrategyCashSuper *Normal = new ConerectStrategyNormal(cost);//抽象策略类(基类)指针指向派生类->具体策略类(普通收费方式) StrategyCashSuper *Return = new ConerectStrategyReturn(cost); //满300返100收费方式 StrategyCashSuper *Rebate = new ConerectStrategyRebate(cost); //打八折收费 //声明环境类,具体调用的算法,由它来维护 Context *c = new Context(); //设置使用的策略类 c->setStrategy(Normal);//设置为普通收费 //调用算法 result = c->getChargeResult(); std::cout << "Accrued expenses: " << result << std::endl; c->setStrategy(Return);//设置为满300返100收费方式 //调用算法 result = c->getChargeResult(); std::cout << "Accrued expenses: " << result << std::endl; c->setStrategy(Rebate);//设置为打八折收费 //调用算法 result = c->getChargeResult(); std::cout << "Accrued expenses: " << result << std::endl; return 0; }
Header-Datei Strategy.h
[code]#ifndef _2STRATEGY_H_ #define _2STRATEGY_H_ //策略类,算法基类 class StrategyCashSuper{ protected: //商品应付费用,定义为保护成员供子类继承 double cost; public: //构造函数 StrategyCashSuper(double c):cost(c){} //收费结果算法 virtual double ChargeResult();//本想定义为纯虚函数,但不可以。因为虚基类本不能实例化 }; //正常收费算法 class ConerectStrategyNormal: public StrategyCashSuper{ public: //构造函数 ConerectStrategyNormal(double c):StrategyCashSuper(c){} //根据本类的收费方式,重写继承的收费算法 double ChargeResult()override; }; //满300返100收费算法 class ConerectStrategyReturn: public StrategyCashSuper{ public: //构造函数 ConerectStrategyReturn(double c):StrategyCashSuper(c){} //重写收费算法 double ChargeResult()override; }; //打八折收费算法 class ConerectStrategyRebate: public StrategyCashSuper{ public: //构造函数 ConerectStrategyRebate(double c):StrategyCashSuper(c){} //重写收费算法 double ChargeResult()override; }; //环境类,根据具体算法,维护上下文使用的类 class Context{ private: //策略基类 StrategyCashSuper *SCS; public: //设置使用的策略 void setStrategy(StrategyCashSuper *s); //具体执行的算法 double getChargeResult(); }; #endif
Implement Strategy.cpp
[code]#include "2Strategy.h" //基类 double StrategyCashSuper::ChargeResult(){ return 0; } //正常收费 double ConerectStrategyNormal::ChargeResult(){ return cost; } //满300返100收费算法 double ConerectStrategyReturn::ChargeResult(){ double res = cost; if(res >= 300) res = cost - 100; return res; } //打八折收费算法 double ConerectStrategyRebate::ChargeResult(){ return cost *0.8; } //设置使用的算法 void Context::setStrategy(StrategyCashSuper *s){ SCS = s; } //具体执行的算法 double Context::getChargeResult(){ return SCS->ChargeResult(); }
Zusammenfassung:
Das Strategiemuster ermöglicht es dem Algorithmus, sich unabhängig von den Clients zu ändern, die ihn verwenden, und wird auch zum Richtlinienmuster. Strategiemuster ist ein Objektverhaltensmuster.
Das Strategiemuster enthält drei Rollen: Die abstrakte Strategieklasse deklariert abstrakte Methoden für die unterstützten Algorithmen und ist die übergeordnete Klasse aller Strategieklassen. Die konkrete Strategieklasse implementiert den in der abstrakten Strategieklasse definierten Algorithmus. Die Umgebungsklasse kann mehrere Strategieklassen verwenden, um ein bestimmtes Problem zu lösen (der Nachteil besteht darin, dass der Client alle gekapselten Strategieklassen kennen muss) und eine Referenzinstanz auf die abstrakte Strategieklasse in der Umgebungsklasse verwalten.
Das Strategiemuster ist eine Kapselung des Algorithmus. Es trennt die Verantwortung des Algorithmus vom Algorithmus selbst und delegiert sie an eine andere Objektverwaltung. Das Strategiemuster kapselt normalerweise eine Reihe von Algorithmen in eine Reihe von Strategieklassen als Unterklasse einer abstrakten Strategieklasse.
Der Hauptvorteil des Strategiemodus ist seine perfekte Unterstützung des „Öffnungs- und Schließprinzips“. Es können Algorithmen ersetzt oder neue Algorithmen hinzugefügt werden, ohne das ursprüngliche System zu ändern Verbessert den Code. Die Wiederverwendbarkeit ist eine Möglichkeit, die Vererbung zu ersetzen und mehrere bedingte Übertragungsanweisungen zu vermeiden. Der Nachteil besteht darin, dass der Client alle Strategieklassen kennen und ihre Unterschiede verstehen muss. Gleichzeitig erhöht sich dadurch die Anzahl der Klassen im System Bis zu einem gewissen Grad kann es viele Strategieklassen geben.
Zu den anwendbaren Situationen des Strategiemusters gehören: Es gibt viele Klassen in einem System, und der Unterschied zwischen ihnen besteht nur in ihrem Verhalten. Durch die Verwendung des Strategiemusters kann ein Objekt dynamisch ein Verhalten unter vielen Verhaltensweisen auswählen Das System muss dynamisch einen von mehreren Algorithmen auswählen. Es muss vermieden werden, mehrere bedingte Auswahlanweisungen zu verwenden, die schwer zu warten sind, und darauf zu achten, dass Algorithmen und zugehörige Datenstrukturen in bestimmten Strategieklassen gekapselt werden.
Das Obige ist der Inhalt einer kurzen Einführung in das C++-Entwurfsmuster und das Strategiemuster. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

Die Beziehung zwischen C# und .NET ist untrennbar miteinander verbunden, aber nicht dasselbe. C# ist eine Programmiersprache, während .NET eine Entwicklungsplattform ist. C# wird verwendet, um Code zu schreiben, in .NETs Intermediate Language (IL) zu kompilieren und von der .NET -Laufzeit (CLR) ausgeführt zu werden.

C#.NET ist immer noch wichtig, da es leistungsstarke Tools und Bibliotheken bietet, die mehrere Anwendungsentwicklung unterstützen. 1) C# kombiniert .NET Framework, um die Entwicklung effizient und bequem zu machen. 2) Mechanismus zum Typensicherheit und Müllsammlung von C#erhöht die Vorteile. 3) .NET bietet eine plattformübergreifende laufende Umgebung und eine reichhaltige APIs, wodurch die Flexibilität der Entwicklung verbessert wird.

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C# und .NET passen sich durch kontinuierliche Aktualisierungen und Optimierungen an die Bedürfnisse neuer Technologien an. 1) C# 9.0 und .NET5 Führen Sie den Datensatztyp und die Leistungsoptimierung ein. 2) .NETCORE verbessert die native und containerische Unterstützung von Cloud. 3) ASP.NetCore integriert sich in moderne Webtechnologien. 4) ML.NET unterstützt maschinelles Lernen und künstliche Intelligenz. 5) Asynchrone Programmierung und Best Practices verbessern die Leistung.

C#.NetissoBableFoREenterPrise-Level Applications-WithemicrosoftCosystemDuetoitsStrongtyPing, Richlibrary, Androbustperformance.

Der Programmierungsprozess von C# in .NET enthält die folgenden Schritte: 1) Schreiben von C# Code, 2) Kompilieren in eine mittlere Sprache (IL) und 3), die durch die .NET -Laufzeit (CLR) ausführt. Die Vorteile von C# in .NET sind die moderne Syntax, das leistungsstarke Typsystem und die enge Integration in das .NET -Framework, das für verschiedene Entwicklungsszenarien geeignet ist, von Desktop -Anwendungen bis hin zu Webdiensten.

C# ist eine moderne, objektorientierte Programmiersprache, die von Microsoft und als Teil des .NET-Frameworks entwickelt wurde. 1.C# unterstützt die objektorientierte Programmierung (OOP), einschließlich Einkapselung, Vererbung und Polymorphismus. 2. Asynchrones Programmieren in C# wird über Async implementiert und wartet auf Schlüsselwörter, um die Reaktionsfähigkeit der Anwendungen zu verbessern. 3.. Verwenden Sie LINQ, um Datensammlungen präzise zu verarbeiten. 4. Häufige Fehler umfassen Null-Referenzausnahmen und Indexausnahmen außerhalb des Bereichs. Zu den Debugging -Fähigkeiten gehört die Verwendung eines Debuggers und Ausnahmeberechnung. 5. Leistungsoptimierung umfasst die Verwendung von StringBuilder und das Vermeiden von unnötigem Packung und Unboxing.

Die Teststrategien für C#.NET-Anwendungen umfassen Unit-Tests, Integrationstests und End-to-End-Tests. 1. Unit -Test stellt sicher, dass die Mindesteinheit des Codes unter Verwendung des Frameworks MStest, Nunit oder Xunit unabhängig funktioniert. 2. Integrierte Tests überprüfen die Funktionen mehrerer Einheiten kombinierter, häufig verwendeten simulierten Daten und externen Diensten. 3. End-to-End-Tests simuliert den vollständigen Betriebsprozess des Benutzers, und Selen wird normalerweise für automatisierte Tests verwendet.


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

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

WebStorm-Mac-Version
Nützliche JavaScript-Entwicklungstools

Sicherer Prüfungsbrowser
Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

SublimeText3 Englische Version
Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung