其他分享
首页 > 其他分享> > Factory-Method工厂方法模式

Factory-Method工厂方法模式

作者:互联网

>>返回《C#常用设计模式》

1. 简介

2. 示例

2.1. 武器工厂例子

2.1.1. 简单工厂

一个需要通过工厂创建对象的需求,所以不需要抽象,那么武器工厂就是具体实现类通过传参不同,制造不同的武器,返回类型为基类武器,实际对象为继承该基类的对象。

2.1.2. 工厂方法

时间定位在冷兵器的年代,武器种类的需求开始出现,单个工厂的方式出现问题:

这时引入了工厂方法模式,可以解决这些问题。

示例:

开始生产的是匕首、太刀,后来需求变化需要宝剑的生产,而且预计后面还会生产其他的武器。

  1. 工厂方法类有且只有一个生产的产品线(方法),比如定义为:武器工厂来生产武器;
  2. 具体的工厂类继承工厂接口,比如:匕首工厂继承武器工厂接口
  3. 实际产品为:匕首(继承自武器
  4. 设计带来的适应性
    • 开始工厂生产的是匕首、太刀,后来因为要适配新武器方便添加的需求,简单工厂模式升级为工厂方法模式
    • 当新种类的武器(宝剑)需要生产,只需要增加宝剑工厂来满足需求,这个工厂可以生产宝剑,宝剑继承基类武器

2.2. 数据库访问工厂示例代码

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

namespace Demo
{
    class Program
    {
        static IFactory fac = new MySQLFactory();
        static void Main(string[] args)
        {
            ISqlHelper sqlHelper = fac.CreateSqlHelper();
            sqlHelper.Execute();
            Console.ReadKey();
        }
    }

    #region 定义接口
    //约定工厂能创建那个类型产品 武器工厂
    public interface IFactory
    {
        ISqlHelper CreateSqlHelper();
    }
    //约定工厂产品的特点 武器
    public interface ISqlHelper
    {
        int Execute();
        object ExecuteScale();
    }
    #endregion

    #region 具体实现
    //工厂方法的具体实现 太刀工厂
    public class MSSQLFactory : IFactory
    {
        public ISqlHelper CreateSqlHelper()
        {
            return new MSSQLSqlHelper();
        }
    }

    //工厂方法的具体实现2 匕首工厂
    public class MySQLFactory : IFactory
    {
        public ISqlHelper CreateSqlHelper()
        {
            return new MySQLSqlHelper();
        }
    }



    //产品的具体实现 匕首
    public class MySQLSqlHelper : ISqlHelper
    {

        public int Execute()
        {
            Console.WriteLine("MySQLExecute");
            return 1;
        }

        public object ExecuteScale()
        {
            Console.WriteLine("MySQLExecuteScale");
            return new object();
        }
    }

    //产品的具体实现2 太刀
    public class MSSQLSqlHelper : ISqlHelper
    {

        public int Execute()
        {
            Console.WriteLine("MSSQLExecute");
            return 1;
        }

        public object ExecuteScale()
        {
            Console.WriteLine("MSSQLExecuteScale");
            return new object();
        }
    }
    #endregion
}

参考资料:
https://www.cnblogs.com/sanjun/p/9972386.html

标签:return,Factory,工厂,Method,ISqlHelper,武器,2.1,public
来源: https://www.cnblogs.com/BigBrotherStone/p/factory-method.html