面向東西編程(OOP)作為一種編程範式,曾經深刻到軟體開辟的各個範疇。計劃形式是面向東西編程中的一種重要不雅點,它們是經過現實驗證的處理打算模板,用於處理罕見的計劃成績,晉升代碼的復用性跟機動性。本文將具體介紹多少種罕見的面向東西計劃形式,並探究它們在高效編程中的利用。
一、計劃形式概述
計劃形式是一套被反覆利用的、少數人承認的、經過分類編目標、代碼計劃經驗的總結。利用計劃形式的目標不是要寫出更好的代碼,而是為了可重用代碼、讓代碼更輕易被他人懂得、保證代碼堅固性。
二、常會晤向東西計劃形式
1. 創建型計劃形式
創建型計劃形式重要關注東西的創建過程,使東西創建與東西利用分別,降落體系之間的耦合度。
單例形式(Singleton Pattern):確保一個類只有一個實例,並供給全局拜訪點。
public class Singleton { private static Singleton instance; private Singleton() { } public static Singleton getInstance() { if (instance == null) instance = new Singleton(); return instance; } }
工廠形式(Factory Pattern):根據差其余情況創建差其余東西實例。 “`csharp public abstract class Product { public abstract void Use(); }
public class ConcreteProductA : Product {
public override void Use()
{
Console.WriteLine("利用產品A");
}
}
public class ConcreteProductB : Product {
public override void Use()
{
Console.WriteLine("利用產品B");
}
}
public class Factory {
public static Product CreateProduct(string type)
{
switch (type)
{
case "A":
return new ConcreteProductA();
case "B":
return new ConcreteProductB();
default:
throw new ArgumentException("未知產品範例");
}
}
}
- **制作者形式(Builder Pattern)**:將一個複雜東西的構建過程與其表示分別,使得同樣的構建過程可能創建差其余表示。
```csharp
public class Builder
{
public void Reset()
{
// 重置構建過程
}
public void BuildPartA()
{
// 構建部分A
}
public void BuildPartB()
{
// 構建部分B
}
}
public class Director
{
private Builder builder;
public Director(Builder builder)
{
this.builder = builder;
}
public void Construct()
{
builder.Reset();
builder.BuildPartA();
builder.BuildPartB();
}
}
2. 構外型計劃形式
構外型計劃形式重要關注類跟東西的組合,將類跟東西構成更大年夜的構造,從而降落體系之間的耦合度。
- 適配器形式(Adapter Pattern):將一個類的介面轉換成客戶端期望的介面。 “`csharp 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)**:靜態地給一個東西增加額定的功能。
```csharp
public abstract class Component
{
public abstract void Operation();
}
public class ConcreteComponent : Component
{
public override void Operation()
{
Console.WriteLine("履行具體操縱");
}
}
public class Decorator : Component
{
private Component component;
public Decorator(Component component)
{
this.component = component;
}
public override void Operation()
{
component.Operation();
// 增加額定功能
}
}
- 組合形式(Composite Pattern):將東西以樹形構造構造起來,使得用戶對單個東西跟組合東西的利用存在一致性。 “`csharp public abstract class Component { public abstract void Operation(); }
public class Leaf : Component {
public override void Operation()
{
Console.WriteLine("履行葉子節點操縱");
}
}
public class Composite : Component {
private List<Component> children = new List<Component>();
public void Add(Component child)
{
children.Add(child);
}
public void Remove(Component child)
{
children.Remove(child);
}
public override void Operation()
{
foreach (var child in children)
{
child.Operation();
}
}
}
### 3. 行動型計劃形式
行動型計劃形式重要關注東西間的通信跟交互,以及東西間義務跟角色的分配。
- **察看者形式(Observer Pattern)**:定義東西之間的一對多依附關係,當一個東西狀況改變時,其全部依附東西都會收到告訴。
```csharp
public interface IObserver
{
void Update();
}
public class ConcreteObserver : IObserver
{
public void Update()
{
Console.WriteLine("收到告訴");
}
}
public class Subject
{
private List<IObserver> observers = new List<IObserver>();
public void Attach(IObserver observer)
{
observers.Add(observer);
}
public void Notify()
{
foreach (var observer in observers)
{
observer.Update();
}
}
}
- 戰略形式(Strategy Pattern):定義一系列的演算法,將每個演算法封裝起來,並使它們可能相互調換。 “`csharp public interface IStrategy { void Algorithm(); }
public class ConcreteStrategyA : IStrategy {
public void Algorithm()
{
Console.WriteLine("履行戰略A");
}
}
public class ConcreteStrategyB : IStrategy {
public void Algorithm()
{
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.Algorithm();
}
} “`
三、總結
本文介紹了罕見的面向東西計劃形式,包含創建型、構外型跟行動型計劃形式。經由過程進修跟利用這些計劃形式,開辟者可能更好地構造跟管理代碼,進步代碼的可擴大年夜性、可保護性跟可重用性。在現實開辟中,應根據具體須要跟場景抉擇合適的計劃形式,以達到高效編程的目標。