欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C#教程

當(dāng)前位置:主頁 > 軟件編程 > C#教程 >

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

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C#教程|點(diǎn)擊: 次

1. 概述

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

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

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

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

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

   2.4 具體產(chǎn)品(ConcreteProduct):抽象工廠模式所創(chuàng)建的任何產(chǎn)品對象都是某一個具體產(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 解決這個問題的根本是將應(yīng)用程序與數(shù)據(jù)庫解耦,使得應(yīng)用程序不再依賴某一個具體的數(shù)據(jù)庫。抽象工廠給我們提供了解決方案。

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

  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 兩個抽象產(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 將一個系列的產(chǎn)品族統(tǒng)一到一起創(chuàng)建

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

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

以上就是本文的全部內(nèi)容,希望能給大家一個參考,也希望大家多多支持我們。

上一篇:C# 設(shè)計模式系列教程-裝飾模式

欄    目:C#教程

下一篇:C#判斷一個String是否為數(shù)字類型

本文標(biāo)題:C# 設(shè)計模式系列教程-抽象工廠模式

本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6479.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有