设计模式之工厂模式(三)

意图:

定义一个用于建立对象的接口,让子类决定实例化哪个类。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. 当类将建立对象的职责委托给多个帮助子类中的某一个,而且你但愿将哪个帮助子类是代理者这一信息局部化的时候。

相关文章
相关标签/搜索