程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 設計形式系列教程-籠統工場形式

C# 設計形式系列教程-籠統工場形式

編輯:C#入門知識

C# 設計形式系列教程-籠統工場形式。本站提示廣大學習愛好者:(C# 設計形式系列教程-籠統工場形式)文章只能為提供參考,不一定能成為您想要的結果。以下是C# 設計形式系列教程-籠統工場形式正文


1. 概述

  籠統工場形式為一個產物家族供給了同一的創立接口。當須要這個產物家族的某一系列的時刻,可以從籠統工場當選出絕對應的系列來創立一個詳細的工場種別。

2. 籠統工場形式中的腳色

   2.1 籠統工場(AbstractFactory):擔負這個腳色的是工場辦法形式的焦點,它是與運用體系貿易邏輯有關的。

   2.2 詳細工場(ConcreteFactory):這個腳色直接在客戶真個挪用下創立產物的實例。這個腳色含有選擇適合的產物對象的邏輯,而這個邏輯是與運用體系的貿易邏輯慎密相干的。

   2.3 籠統產物(AbstractProduct):擔負這個腳色的類是工場辦法形式所創立的對象的父類,或它們配合具有的接口。

   2.4 詳細產物(ConcreteProduct):籠統工場形式所創立的任何產物對象都是某一個詳細產物類的實例。這是客戶端終究須要的器械,其外部必定充斥了運用體系的貿易邏輯。

3. 實例:改換數據庫。現有體系應用的是SqlServer數據庫,它的Licence是付費的,有的客戶想應用收費的數據庫辦事,如Access。有的客戶具有其它數據庫辦事商的Licence,他們也不想應用還要另付費的SqlServer。

   3.1 處理這個成績的基本是將運用法式與數據庫解耦,使得運用法式不再依附某一個詳細的數據庫。籠統工場給我們供給懂得決計劃。

   3.2 完成類圖

https://www.aspphp.online/bianchen/UploadFiles_4619/201707/2017072810424104.png

  3.3 完成代碼

    3.3.1 籠統工場類,供給了創立一組相干或互相依附的對象的接口。

 /// <summary>
 /// 籠統工場類
 /// </summary>
 public interface IDatabaseFactory
 {

  IEmployee CreateEmployee();

  IUser CreateUser();
 }

    3.3.2 詳細工場類,供給了創立SqlServer,或Access詳細產物的完成

 /// <summary>
 /// 與SqlServer相干產物的完成
 /// </summary>
 public class SqlServerDatabaseFactory : IDatabaseFactory
 {

  public IEmployee CreateEmployee()
  {

   return new SqlEmployee();
  }

  public IUser CreateUser()
  {

   return new SqlUser();
  }

 }


 /// <summary>
 /// 與Access相干產物的完成
 /// </summary>
 public class AccessDatabaseFactory : IDatabaseFactory
 {

  public IEmployee CreateEmployee()
  {

   return new AccessEmployee();
  }

  public IUser CreateUser()
  {

   return new AccessUser();
  }

 }

    3.3.3 兩個籠統產物,分離是IUser和IEmployee

 /// <summary>
 /// 籠統產物
 /// </summary>
 public interface IUser 
 {
  User GetUser();

  bool SaveUser();
 }

 /// <summary>
 /// 籠統產物
 /// </summary>
 public interface IEmployee
 {

  Employee GetEmployee();

  bool SaveEmployee();
 }

  3.3.4 詳細產物的完成

 /// <summary>
 /// 與SqlServer相干的詳細產物User
 /// </summary>
 public class SqlUser : IUser
 {
  public User GetUser()
  {

   return null;
  }

  public bool SaveUser()
  {

   return false;
  }

 }

 /// <summary>
 /// 與SqlServer相干的詳細產物Employee
 /// </summary>
 public class SqlEmployee : IEmployee
 {

  public SqlEmployee()
  {

  }

  public Employee GetEmployee()
  {

   return null;
  }

  public bool SaveEmployee()
  {

   return false;
  }

 }

 /// <summary>
 /// 與Access相干的詳細產物User
 /// </summary>
 public class AccessUser : IUser
 {

  public AccessUser()
  {

  }

  public User GetUser()
  {

   return null;
  }

  public bool SaveUser()
  {

   return false;
  }

 }

 /// <summary>
 /// 與Access相干的詳細產物Employee
 /// </summary>
 public class AccessEmployee : IEmployee
 {

  public AccessEmployee()
  {

  }

  public Employee GetEmployee()
  {

   return null;
  }

  public bool SaveEmployee()
  {

   return false;
  }

 }

4. 形式總結

  4.1 長處
    4.1.1 詳細產物從客戶代碼中被分別出來
    4.1.2 輕易轉變產物的系列(如SqlServer產物系列,Access產物系列)
    4.1.3 將一個系列的產物族同一到一路創立

  4.2 缺陷
    在產物族中擴大新的產物是很艱苦的,它須要修正籠統工場的接口,如增長一種產物Customer變得異常艱苦。

  4.3 適用規模
    4.3.1 一個體系要自力於它的產物的創立、組合和表現時。
    4.3.2 一個體系要由多個產物系列中的一個來設置裝備擺設時。
    4.3.3 當你要強調一系列相干的產物對象的設計以便停止結合應用時。
    4.3.4 當你供給一個產物類庫,而只想顯示它們的接口而不是完成時。

以上就是本文的全體內容,願望能給年夜家一個參考,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved