国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C# 設(shè)計(jì)模式系列教程-抽象工廠模式

2019-10-29 21:27:11
字體:
供稿:網(wǎng)友
抽象工廠模式為創(chuàng)建一組相關(guān)或相互依賴的對象提供一個(gè)接口,而且無需指定他們的具體類。
 

1. 概述

  抽象工廠模式為一個(gè)產(chǎn)品家族提供了統(tǒng)一的創(chuàng)建接口。當(dāng)需要這個(gè)產(chǎn)品家族的某一系列的時(shí)候,可以從抽象工廠中選出相對應(yīng)的系列來創(chuàng)建一個(gè)具體的工廠類別。

2. 抽象工廠模式中的角色

   2.1 抽象工廠(AbstractFactory):擔(dān)任這個(gè)角色的是工廠方法模式的核心,它是與應(yīng)用系統(tǒng)商業(yè)邏輯無關(guān)的。

   2.2 具體工廠(ConcreteFactory):這個(gè)角色直接在客戶端的調(diào)用下創(chuàng)建產(chǎn)品的實(shí)例。這個(gè)角色含有選擇合適的產(chǎn)品對象的邏輯,而這個(gè)邏輯是與應(yīng)用系統(tǒng)的商業(yè)邏輯緊密相關(guān)的。

   2.3 抽象產(chǎn)品(AbstractProduct):擔(dān)任這個(gè)角色的類是工廠方法模式所創(chuàng)建的對象的父類,或它們共同擁有的接口。

   2.4 具體產(chǎn)品(ConcreteProduct):抽象工廠模式所創(chuàng)建的任何產(chǎn)品對象都是某一個(gè)具體產(chǎn)品類的實(shí)例。這是客戶端最終需要的東西,其內(nèi)部一定充滿了應(yīng)用系統(tǒng)的商業(yè)邏輯。

3. 實(shí)例:更換數(shù)據(jù)庫。現(xiàn)有系統(tǒng)使用的是SqlServer數(shù)據(jù)庫,它的Licence是付費(fèi)的,有的客戶想使用免費(fèi)的數(shù)據(jù)庫服務(wù),如Access。有的客戶擁有其它數(shù)據(jù)庫服務(wù)商的Licence,他們也不想使用還要另付費(fèi)的SqlServer。

   3.1 解決這個(gè)問題的根本是將應(yīng)用程序與數(shù)據(jù)庫解耦,使得應(yīng)用程序不再依賴某一個(gè)具體的數(shù)據(jù)庫。抽象工廠給我們提供了解決方案。

   3.2 實(shí)現(xiàn)類圖

C#,設(shè)計(jì)模式,抽象工廠模式

  3.3 實(shí)現(xiàn)代碼

    3.3.1 抽象工廠類,提供了創(chuàng)建一組相關(guān)或相互依賴的對象的接口。

 /// <summary> /// 抽象工廠類 /// </summary> public interface IDatabaseFactory {  IEmployee CreateEmployee();  IUser CreateUser(); }

    3.3.2 具體工廠類,提供了創(chuàng)建SqlServer,或Access具體產(chǎn)品的實(shí)現(xiàn)

 /// <summary> /// 與SqlServer相關(guān)產(chǎn)品的實(shí)現(xiàn) /// </summary> public class SqlServerDatabaseFactory : IDatabaseFactory {  public IEmployee CreateEmployee()  {   return new SqlEmployee();  }  public IUser CreateUser()  {   return new SqlUser();  } } /// <summary> /// 與Access相關(guān)產(chǎn)品的實(shí)現(xiàn) /// </summary> public class AccessDatabaseFactory : IDatabaseFactory {  public IEmployee CreateEmployee()  {   return new AccessEmployee();  }  public IUser CreateUser()  {   return new AccessUser();  } }

    3.3.3 兩個(gè)抽象產(chǎn)品,分別是IUser和IEmployee

 /// <summary> /// 抽象產(chǎn)品 /// </summary> public interface IUser  {  User GetUser();  bool SaveUser(); } /// <summary> /// 抽象產(chǎn)品 /// </summary> public interface IEmployee {  Employee GetEmployee();  bool SaveEmployee(); }

  3.3.4 具體產(chǎn)品的實(shí)現(xiàn)

 /// <summary> /// 與SqlServer相關(guān)的具體產(chǎn)品User /// </summary> public class SqlUser : IUser {  public User GetUser()  {   return null;  }  public bool SaveUser()  {   return false;  } } /// <summary> /// 與SqlServer相關(guān)的具體產(chǎn)品Employee /// </summary> public class SqlEmployee : IEmployee {  public SqlEmployee()  {  }  public Employee GetEmployee()  {   return null;  }  public bool SaveEmployee()  {   return false;  } } /// <summary> /// 與Access相關(guān)的具體產(chǎn)品User /// </summary> public class AccessUser : IUser {  public AccessUser()  {  }  public User GetUser()  {   return null;  }  public bool SaveUser()  {   return false;  } } /// <summary> /// 與Access相關(guān)的具體產(chǎn)品Employee /// </summary> public class AccessEmployee : IEmployee {  public AccessEmployee()  {  }  public Employee GetEmployee()  {   return null;  }  public bool SaveEmployee()  {   return false;  } }

4. 模式總結(jié)

  4.1 優(yōu)點(diǎn)
    4.1.1 具體產(chǎn)品從客戶代碼中被分離出來
    4.1.2 容易改變產(chǎn)品的系列(如SqlServer產(chǎn)品系列,Access產(chǎn)品系列)
    4.1.3 將一個(gè)系列的產(chǎn)品族統(tǒng)一到一起創(chuàng)建

  4.2 缺點(diǎn)
    在產(chǎn)品族中擴(kuò)展新的產(chǎn)品是很困難的,它需要修改抽象工廠的接口,如增加一種產(chǎn)品Customer變得非常困難。

  4.3 實(shí)用范圍
    4.3.1 一個(gè)系統(tǒng)要獨(dú)立于它的產(chǎn)品的創(chuàng)建、組合和表示時(shí)。
    4.3.2 一個(gè)系統(tǒng)要由多個(gè)產(chǎn)品系列中的一個(gè)來配置時(shí)。
    4.3.3 當(dāng)你要強(qiáng)調(diào)一系列相關(guān)的產(chǎn)品對象的設(shè)計(jì)以便進(jìn)行聯(lián)合使用時(shí)。
    4.3.4 當(dāng)你提供一個(gè)產(chǎn)品類庫,而只想顯示它們的接口而不是實(shí)現(xiàn)時(shí)。

以上就是本文的全部內(nèi)容,希望能給大家一個(gè)參考,也希望大家多多支持VEVB武林網(wǎng)。



注:相關(guān)教程知識(shí)閱讀請移步到c#教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 翁源县| 贵州省| 淮北市| 巴林左旗| 龙陵县| 乌苏市| 营口市| 革吉县| 博野县| 武平县| 梁山县| 布尔津县| 大埔县| 安顺市| 海丰县| 保德县| 库车县| 沙洋县| 台湾省| 清苑县| 禄丰县| 江门市| 德保县| 富顺县| 民和| 盘锦市| 高碑店市| 秭归县| 中卫市| 香河县| 商都县| 宁陕县| 宁夏| 鲁山县| 甘德县| 凭祥市| 旬邑县| 西乌珠穆沁旗| 潍坊市| 县级市| 大宁县|