工厂模式:

   工厂模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其他子类。


结构图:

                           


代码:

   

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

namespace 工厂模式_leifeng
{


class LeiFeng  //创建雷锋类,并设置方法
    {
        public void Sweep()   //方法1
        {
            Console.WriteLine("扫地");
        }
        public void Wash()  //方法2
        {
            Console.WriteLine("洗衣服");
        }
        public void BuyRice()   //方法3
        {
            Console.WriteLine("买大米");
        }
    }

    class Undergraduate : LeiFeng  //学雷锋的大学生类
    {
    }

    class Volunteer : LeiFeng  //学雷锋的社区志愿者
    {
    }
    interface IFactory              //雷锋工厂 
    {
        LeiFeng CreateLeiFeng();  //创建雷锋的方法
    }

    class UndergraduateFactory  :  IFactory     //学雷锋大学生工厂
    {
        public LeiFeng CreateLeiFeng()  //重写雷锋方法
        {
            return new Undergraduate();
        }
    }
    class Volunteerfactory : IFactory
    {
        public LeiFeng CreateLeiFeng()
        {
            return new Volunteer();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {

            IFactory factory = new UndergraduateFactory();
            LeiFeng student = factory.CreateLeiFeng();

            student.BuyRice();
            student.Sweep();
            student.Wash();
            Console.ReadKey();
        }
    }
}

解释:

   通过创建 雷锋类,大学生类和志愿者类,大学生和志愿者继承雷锋类,同时创建 雷锋工厂和学雷锋大学生工厂,然后在客户端选择创建 大学生去当雷锋还是志愿者去当雷锋。


总结:

   工厂模式和简单工厂模式相比的话就是克服了简单工厂的 违背开-封闭原则,通过多态性降低客户和程序之间耦合性,但是造成了增加一个功能就得多添加一个工厂,这样无形之中增加了开发量。


本文转载:CSDN博客