asp.net—工廠模式


一、什么是工廠模式

  定義:定義一個創建對象的接口,讓其子類自己決定實例化哪一個工廠類。

二、怎么使用工廠模式

  首先模擬一個場景:有一個汽車工廠,  可以日本車、美國車、中國車。。。

  這個場景怎么用工廠模式表達出來呢?

  要生產汽車所以首先要有個汽車類

 //抽象一個汽車類
 public abstract class CarBreed
 {
     public string Name {get;set;}
 }
 
 public class JapanCar : CarBreed
 {
     public JapanCar(){
         Console.WriteLine("日本車");
     }
 }
  public class ChineseCar : CarBreed
 {
     public ChineseCar(){
         Console.WriteLine("中國車");
     }
 }
  public class USACar : CarBreed
 {
     public USACar(){
         Console.WriteLine("美國車");
     }
 }

首先用簡單工廠模式:(缺點:工廠類集中了所有產品創建邏輯,不利於擴展)

  //汽車工廠(簡單工廠)
 public class CarFactory
 {
     public static CarBreed getCarBreed(string car)
     {
         switch(car)
         {
             case "JapanCar":return new JapanCar();
             case "ChineseCar":return new ChineseCar();
             case "USACar":return new USACar();
         }
     }
 }
  //程序入口
 public class Program
 {
     public static void Main(string[] args)
     {
         // 日本車
         CarBreed mycar = CarFactory.getCarBreed("JapanCar");
         //中國車
         mycar = CarFactory.getCarBreed("ChineseCar");
         //美國車
         mycar = CarFactory.getCarBreed("USACar");
         Console.ReadLine();
     }
 }

 

然后用工廠模式:

//汽車工廠(工廠模式)
 public abstract class CarFactory
 {
     public abstract CarBreed getCarBreed();     
 }
 //日本車工廠
 public class JapanCarFactory : CarFactory
 {
     public override  CarBreed getCarBreed()
     {
         return new JapanCar();
     }
 }
  //中國車工廠
 public class ChineseCarFactory : CarFactory
 {
     public override  CarBreed getCarBreed()
     {
         return new ChineseCar();
     }
 }
  //美國車工廠
  public class USACarFactory : CarFactory
 {
     public override  CarBreed getCarBreed()
     {
         return new USACar();
     }
 }
 //程序入口
 public class Program
 {
     public static void Main(string[] args)
     {
         // 初始化工廠
         CarFactory Factory = new JapanCarFactory();
         //日本車
         CarBreed mycar = Factory.getCarBreed();
         //中國車
         Factory = new ChineseCarFactory();
         mycar = Factory.getCarBreed();
         //。。。。。。。
         Console.ReadLine();
     }
 }

還有一種抽象工廠模式,這個比較復雜暫時還沒研究透徹這里就不做闡述

三、為什么要用工廠模式 

  優勢1:一般在代碼中,實例化一個類A是直接new A(),假如類A是一個完全獨立的類,沒有相似類,則沒有必要使用工廠模式。但是如果類A本身有一個相似類B,而在實際使用類A或者類B的實例時,如果關心的是類A與類B的共同部分,則工廠模式就可以體現出它的優勢。
  優勢2:初始化封裝。在需求一個類的實例時,假如需要一個相同屬性的實例,每次初始化的操作是一樣的,用工廠模式可以對初始化進行封裝,簡化操作。

四、工廠模式使用場景

  (1)客戶端不需要知道它所創建的對象的類。例子中我們不知道每個圖片加載器具體叫什么名,只知道創建它的工廠名就完成了床架過程。
  (2)客戶端可以通過子類來指定創建對應的對象。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM