最佳答案
引言
在軟體開辟範疇,面向東西計劃形式(Object-Oriented Design Patterns)是處理罕見成績的最佳現實,它可能幫助開辟者進步代碼品質、加強可讀性跟可保護性。.NET平台作為富強的開辟情況,為開辟者供給了豐富的面向東西編程東西跟庫。本文將深刻探究.NET平台下的經典面向東西計劃形式,幫助開辟者破解軟體架構困難,晉升開辟效力。
計劃形式概述
計劃形式是一套被反覆利用、少數人知曉、經過分類編目標、代碼計劃經驗的總結。利用計劃形式是為了可重用代碼、讓代碼更輕易被他人懂得、保證代碼堅固性。
計劃形式可能分為以下三類:
- 創建型形式:處理東西的實例化過程。
- 構外型形式:處理類或東西的組合。
- 行動型形式:處理東西之間的通信。
.NET平台下的經典計劃形式
創建型形式
- 簡單工廠形式(Simple Factory Pattern):定義一個用於創建東西的介面,讓子類決定實例化哪一個類。簡單工廠形式是最簡單的工廠形式,它避免了利用多個if-else或switch語句。
public interface IProduct
{
void Use();
}
public class ConcreteProductA : IProduct
{
public void Use()
{
Console.WriteLine("利用產品A");
}
}
public class ConcreteProductB : IProduct
{
public void Use()
{
Console.WriteLine("利用產品B");
}
}
public class SimpleFactory
{
public static IProduct CreateProduct(string type)
{
if (type == "A")
{
return new ConcreteProductA();
}
else if (type == "B")
{
return new ConcreteProductB();
}
return null;
}
}
- 工廠方法形式(Factory Method Pattern):定義一個用於創建東西的介面,讓子類決定實例化哪一個類。工廠方法形式是對簡單工廠形式的進一步抽象。
public interface IProduct
{
void Use();
}
public class ConcreteProductA : IProduct
{
public void Use()
{
Console.WriteLine("利用產品A");
}
}
public class ConcreteProductB : IProduct
{
public void Use()
{
Console.WriteLine("利用產品B");
}
}
public abstract class Creator
{
public abstract IProduct FactoryMethod();
}
public class ConcreteCreatorA : Creator
{
public override IProduct FactoryMethod()
{
return new ConcreteProductA();
}
}
public class ConcreteCreatorB : Creator
{
public override IProduct FactoryMethod()
{
return new ConcreteProductB();
}
}
構外型形式
- 適配器形式(Adapter Pattern):將一個類的介面轉換成客戶期望的另一個介面,使得底本介面不兼容的類可能一起任務。
public interface ITarget
{
void Request();
}
public class Adaptee
{
public void SpecificRequest()
{
Console.WriteLine("特定懇求");
}
}
public class Adapter : ITarget
{
private Adaptee adaptee;
public Adapter(Adaptee adaptee)
{
this.adaptee = adaptee;
}
public void Request()
{
adaptee.SpecificRequest();
}
}
- 裝潢器形式(Decorator Pattern):靜態地給一個東西增加一些額定的職責,比生成子類更為機動。
public interface IComponent
{
void Operation();
}
public class ConcreteComponent : IComponent
{
public void Operation()
{
Console.WriteLine("履行基本操縱");
}
}
public class Decorator : IComponent
{
private IComponent component;
public Decorator(IComponent component)
{
this.component = component;
}
public void Operation()
{
component.Operation();
// 增加額定職責
Console.WriteLine("增加額定職責");
}
}
行動型形式
- 察看者形式(Observer Pattern):定義東西間的一對多依附關係,當一個東西改變狀況時,全部依附於它的東西都會掉掉落告訴並主動更新。
public interface IObserver
{
void Update();
}
public class ConcreteObserverA : IObserver
{
public void Update()
{
Console.WriteLine("察看者A更新");
}
}
public class ConcreteObserverB : IObserver
{
public void Update()
{
Console.WriteLine("察看者B更新");
}
}
public interface ISubject
{
void Attach(IObserver observer);
void Detach(IObserver observer);
void Notify();
}
public class ConcreteSubject : ISubject
{
private List<IObserver> observers = new List<IObserver>();
public void Attach(IObserver observer)
{
observers.Add(observer);
}
public void Detach(IObserver observer)
{
observers.Remove(observer);
}
public void Notify()
{
foreach (var observer in observers)
{
observer.Update();
}
}
}
- 戰略形式(Strategy Pattern):定義一系列演算法,把它們一個個封裝起來,並使它們可相互調換。
public interface IStrategy
{
void Execute();
}
public class ConcreteStrategyA : IStrategy
{
public void Execute()
{
Console.WriteLine("履行戰略A");
}
}
public class ConcreteStrategyB : IStrategy
{
public void Execute()
{
Console.WriteLine("履行戰略B");
}
}
public class Context
{
private IStrategy strategy;
public Context(IStrategy strategy)
{
this.strategy = strategy;
}
public void SetStrategy(IStrategy strategy)
{
this.strategy = strategy;
}
public void ExecuteStrategy()
{
strategy.Execute();
}
}
總結
.NET平台下的經典面向東西計劃形式為開辟者供給了豐富的處理打算,幫助開辟者破解軟體架構困難,晉升開辟效力。經由過程控制跟利用這些計劃形式,開辟者可能寫出愈加清楚、可保護跟可擴大年夜的代碼。