(27)C#设计模式——工厂方法

概述

工厂方法模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。

工厂方法是简单工厂进一步的抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。

在工厂方法模式中,核心的工厂类不在负责所有产品的创建,而是将具体创建工作交给子类来完成。这个核心类仅仅负责人给吃具体工厂必须实现的接口,而不接触哪一个产品类被实例化这种细节。这使得工厂模式可以允许在不修改工厂角色的情况下引进新产品。

角色与结构

抽象工厂:是工厂方法模式的核心,与应用程序无关。任何模式中创建的对象的工厂类必须实现这个接口。

具体工厂:实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。

抽象产品:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或者共同拥有的接口。

具体产品:这个角色实现抽象产品所定义的接口。某具体产品有专门的具体工厂创建。它们之间往往一一对应。

实例

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

namespace _8FactoryMethod
{
    class Program
    {
        static void Main(string[] args)
        {
            //初始化 生产工厂
            Creator bf = new BasketballFactory();
            Creator ff = new FootballFactory();
            Creator ppf = new PingpangballFactory();

            //生产
           Ball BF= bf.CreateBall();
            BF.ShowBall();
            Ball FF = ff.CreateBall();
            FF.ShowBall();
            Ball PPF = ppf.CreateBall();
            PPF.ShowBall();

            Console.ReadLine();
        }
    }
    /// <summary>
    /// 抽象父类 球类
    /// </summary>
    public abstract class Ball
    {
        public abstract void ShowBall();
    }

    /// <summary>
    /// 篮球类  实现抽象父类中的ShowBall方法
    /// </summary>
    public class Baseketball : Ball
    {
        public override void ShowBall()
        {
            Console.WriteLine("我是篮球");
        }
    }
    /// <summary>
    /// 足球类  实现抽象父类中的ShowBall方法
    /// </summary>
    public class Football : Ball
    {
        public override void ShowBall()
        {
            Console.WriteLine("我是足球");
        }
    }
    /// <summary>
    /// 乒乓球类  实现抽象父类中的ShowBall方法
    /// </summary>
    public class Pingpangbll : Ball
    {
        public override void ShowBall()
        {
            Console.WriteLine("我是乒乓球");
        }
    }
    /// <summary>
    /// 抽象工厂类 定义生产方法
    /// </summary>
    public abstract class Creator
    {
        public abstract Ball CreateBall();
    }
    /// <summary>
    /// 篮球工厂 
    /// </summary>
    public class BasketballFactory : Creator
    {
        public override Ball CreateBall()
        {
            return new Baseketball();//生产篮球
        }
    }
    /// <summary>
    /// 足球工厂类
    /// </summary>
    public class FootballFactory : Creator
    {
        public override Ball CreateBall()
        {
            return new Football();//生产足球
        }
    }
    /// <summary>
    /// 乒乓球工厂类
    /// </summary>
    public class PingpangballFactory : Creator
    {
        public override Ball CreateBall()
        {
            return new Pingpangbll();//生产乒乓球
        }
    }

}
/*output:
我是篮球
我是足球
我是乒乓球
*/

猜你喜欢

转载自blog.csdn.net/qq_39003429/article/details/82146359
今日推荐