程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> C# 設計模式之簡單工廠模式

C# 設計模式之簡單工廠模式

編輯:C#基礎知識

我們在編程的時候,每當"new"一個對象之後,這個對象就依賴於這個類了。如果在後期的維護過程中由於某些原因需要修改一下這個類,則唯一的做法就是打開源代碼,進行修改,修改所有與這個對象有關的操作。這對我們是非常不利的

所以我們專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類或接口。簡單工廠模式又稱為靜態工廠方法(Static Factory Method)模式,屬於類的創建型模式。

根據提供的數據或者參數返回幾個可能的類中的一個實例,說通俗點有點像面向對象編程中的多態性,一個基類,有多個派生類,在另外的調用程序中,根據參數來決定返回這個基類的哪個具體的派生類,返回值為基類類型,因為基類的引用可以指向派生類對象,而且這些所有的派生類都包含有基類的函數,也就是說派生類中有相同的函數,但是函數的實現可能不同。

 

舉現實中的例子說明:
每次參加不同的聚會或者與不同的人見面,可能穿的衣服是不一樣的,比如,你今天上午要與你的一個新客戶見面,你可能會對你的老婆說:老婆,給拿件商務裝(參數),我要去見我的一個客戶,你老婆(工廠類)接到你的請求(商務裝參數)後,從衣櫃中取出一件商務裝(具體產品),交給你。整個過程就完成了。

實例代碼:

 /// <summary>
 /// 抽象產品類:上衣
 /// </summary>
 public interface ICoat
 {
   void GetYourCoat();
 } 

namespace SimpleFactory

{
 /// <summary>
 /// 具體產品類:商務上衣
 /// </summary>
 public class BusinessCoat:ICoat
 {
   public void GetYourCoat()
   {
     Console.WriteLine("商務上衣");
   }
 }

 /// <summary>
 /// 具體產品類:時尚上衣
 /// </summary>
 public class FashionCoat : ICoat
 {
 /// <summary>
 /// 實現ICoat中定義的方法
 /// </summary>
   public void GetYourCoat()
   {
     Console.WriteLine("時尚上衣");
  }
 }
}


簡單工廠模式中最核心的部分:工廠類
namespace SimpleFactory
{
 /// <summary>
 /// 簡單工廠模式中的核心部分:工廠類
 /// </summary>
 public class Factory
 {
 public ICoat CreateCoat(string styleName)
 {
   switch (styleName.Trim().ToLower())
   {
   case "business":
     return new BusinessCoat();
   case "fashion":
     return new FashionCoat();
   default :
     throw new Exception("還沒有你要的那種衣服");
   }
 }
 }
}

客戶在調用的時候的代碼
 /// <summary>
 /// 客戶類
 /// </summary>
class Client
 {
  static void Main(string[] args)
   {
     ICoat food;
     try
     {
       Factory factory = new Factory();
       Console.Writeln("我要的是時尚上衣");
       food = factory.CreateCoat("fashion");
       food.GetYourCoat();
       }
     catch (Exception ex)
     {
     Console.WriteLine(ex.Message);
     }
   }
 }

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