設計模式之工廠模式(三)

意圖:

定義一個用於建立對象的接口,讓子類決定實例化哪個類。Factory Method使得一個類的實例化延遲到子類(即:工廠子類)。ide

 

工廠模式結構圖:

 

工廠模式代碼實現

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;spa

namespace 工廠模式
{
    class Program
    {
        static void Main(string[] args)
        {
           
            
           
            Factory factory = null;
            Product product = null;
            while (true)
            {
                Console.WriteLine("你想生產Car請按1鍵,想生產AirPlane請按2鍵,想生產Tank請按3鍵");
                int num = int.Parse(Console.ReadLine());
                switch (num)
                {
                    case 1: factory = new FactoryCar(); product = factory.produc(); break;
                    case 2: factory = new FactoryAirPlane(); product = factory.produc(); break;
                    case 3: factory = new FactoryTank(); product = factory.produc(); break;代理

                    default: Console.WriteLine("請按1~3鍵"); break;對象

                }
            
            }
          接口

            
            Console.ReadLine();string

           
        }產品


        public static void print(string str)
        {
            Console.WriteLine(str);
        }
    }it

    public abstract class Factory//工廠父類
    {
        public abstract Product produc();io

    
    }class

    public class FactoryCar : Factory//生產Car的工廠
    {
        public override Product produc()
        {
            Console.WriteLine("你生產了一輛車");
            return new car();
        }
    }

    public class FactoryAirPlane : Factory//生產Car的工廠
    {
        public override Product produc()
        {
            Console.WriteLine("你生產了一架飛機");
            return new airplane();

        }
    }
    public class FactoryTank : Factory//生產Tank的工廠
    {
        public override Product produc()
        {
            Console.WriteLine("你生產了一輛坦克");
            return new Tank();
        }
    }
    public abstract class Product//產品類
    {
       
        public abstract string production();//生產產品
    }

    public class car:Product//Car產品
    {
        public override string production()
        {
            return "car";
        }
    }

    public class airplane:Product//飛機產品
    {
        public override string production()
        {
            return "airplane";
        }
    
    }

    public class Tank : Product//坦克產品
    {
        public override string production()
        {
            return "tank";
        }
    
    }
}
 

實現要點

Factory Method模式的兩種狀況:一是Creator類是一個抽象類且它不提供它所聲明的工廠方法的實現;二是Creator是一個具體的類且它提供一個工廠方法的缺省實現。

工廠方法是能夠帶參數的。

工廠的做用並不單單只是建立一個對象,它還能夠作對象的初始化,參數的設置等。

 

功能

 

用工廠方法在一個類的內部建立對象一般比直接建立對象更靈活。

Factory Method模式經過面向對象的手法,將所要建立的具體對象的建立工做延遲到了子類,從而提供了一種擴展的策略,較好的解決了這種緊耦合的關係。

 

適用類型

在如下狀況下,適用於工廠方法模式: 1. 當一個類不知道它所必須建立的對象的類的時候。 2. 當一個類但願由它的子類來指定它所建立的對象的時候。 3. 當類將建立對象的職責委託給多個幫助子類中的某一個,而且你但願將哪個幫助子類是代理者這一信息局部化的時候。

相關文章
相關標籤/搜索