【揭秘常見面向對象設計模式】高效編程的藝術與策略

提問者:用戶FBRB 發布時間: 2025-06-08 02:37:48 閱讀時間: 3分鐘

最佳答案

面向東西編程(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();
  }

} “`

三、總結

本文介紹了罕見的面向東西計劃形式,包含創建型、構外型跟行動型計劃形式。經由過程進修跟利用這些計劃形式,開辟者可能更好地構造跟管理代碼,進步代碼的可擴大年夜性、可保護性跟可重用性。在現實開辟中,應根據具體須要跟場景抉擇合適的計劃形式,以達到高效編程的目標。

相關推薦