常用設(shè)計(jì)模式整理

簡單工廠模式

  • 用一個(gè)單獨(dú)的類完成創(chuàng)建實(shí)例的過程
// Example
// 創(chuàng)建基類
public class Father{...}
// 根據(jù)情況創(chuàng)建對應(yīng)的子類,并覆寫必要的方法
public class Son1 : Father {...}
public class Son2 : Father {...}
// 創(chuàng)建工廠類,工廠類根據(jù)情況創(chuàng)建需要的實(shí)例
public class Factroy
{
  Father father = null;
  swith(operate)
  {
    case "Son1":
      father = new Son1();
    case "...":
      father = ...
  }
  // 后續(xù)操作
}

策略模式

  • 分別定義和封裝算法家族,這些算法完成相同的工作,只是實(shí)現(xiàn)不同
  • 由一個(gè)Context類來負(fù)責(zé)維護(hù)需要使用的算法類,而減少客戶端的影響,簡化了單元測試
// Example
// 創(chuàng)建抽象類
pulic abstract class Father
{
  //定義需要實(shí)現(xiàn)的方法
}
// 創(chuàng)建不同算法的類繼承抽象類,實(shí)現(xiàn)對應(yīng)的方法
public class Son1 : Father{...}
public class Son2 : Father{...}
// 創(chuàng)建維護(hù)類,有維護(hù)類保持對算法類的控制,根據(jù)情況創(chuàng)建需要的算法
public class Context
{
  // 保有對算法的引用
  Father father;
  // 創(chuàng)建的時(shí)候傳入需要的實(shí)例
  public Context(Father father)
  {
    this.father = father;
  }
} 

裝飾模式

  • 動(dòng)態(tài)的給某對象添加額外的職責(zé)的模式
  • 將類中的裝飾功能分離,留下核心的功能
  • 在根據(jù)需要?jiǎng)討B(tài)的改變類所需要的裝飾功能,去除重復(fù)的邏輯
  • 主體維持一個(gè)裝飾(或?yàn)榭眨?,裝飾維持一個(gè)裝飾(或?yàn)榭眨?/li>
// Example
// 抽象類定義操作方法
abstract class Component
{
  public abstract void Operation();
}

// MainObject類定義被裝飾對象并添加職責(zé)
class MainObject : Component 
{
  public overrive void Operation()
  {
    ......
  }
}
// Decorator類用來裝飾抽象類,繼承Component
abstract class Decorator : Component
{
  protected Component component;
  
  public void SetComponent(Component component)
  {
    this.component = component;
  }
  
  public override void Operation()
  {
    if(component != null)
    {
      component.Operation();
    }
  }
}

代理模式

  • 為其他對象提供一種代理以控制對這個(gè)對象的訪問
  • 為一個(gè)對象在不同的地址空間提供局部代表
  • 可以隱藏一個(gè)對象存在于不同地址空間的事實(shí)
  • 用來控制真是對象訪問時(shí)候的權(quán)限
  • 當(dāng)調(diào)用真實(shí)對象的時(shí)候,代理可以處理另外I的事情
// Example
// 定義代理和引用對象的共同接口
abstact class Subject
{
  public abstract void Request();
}
// 真實(shí)調(diào)用的類
class RealSubject : Subject
{
  public override void Request()
  {
    ...
  }
}
// 代理類
class Proxy : Subject
{
  RealSubject realSubject;
  public override void Request()
  {
    if(realSubject == null)
    {
      realSubject = new RealSubject();
      ...
    }
    realSubject.Request();
  }
}

工廠方法模式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容