(26)C#设计模式——简单工厂

定义

简单工厂模式:定义一个Factoryl类,可以根据参数的不同返回不同类的实例,被创建的实例通常都有共同的父类。又称为静态工厂模式,Factory类为静态类或包含静态方法。实质上是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类的实例。

参与者

Product:抽象产品类,将具体产品类公共的代码进行抽象和提取后封装在一个抽象产品类中。

ConcreteProduct:具体产品类,将需要创建的各种不同产品对象的相关代码封装到具体产品类中。

Factory类:工厂类,提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的方法,该方法可以根据所传入的参数的不同创建不同的具体产品对象

Client:客户端类,只需调用工厂类的工厂方法并传入相应的参数即可得到一个产品对象

简单实例

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

namespace _7SimpleFactory
{
    //客户端调用
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Drink kele = DrinkFactory.CreateDrink("可乐");
                Drink xuebi = DrinkFactory.CreateDrink("雪碧");
                Drink yibao = DrinkFactory.CreateDrink("怡宝");
                if (kele != null)
                {
                    Console.WriteLine(kele.ShowDrink());
                }
                if (xuebi != null)
                {
                    Console.WriteLine(xuebi.ShowDrink());
                }
                if (yibao != null)
                {
                    Console.WriteLine(yibao.ShowDrink());
                }
            }
            catch (Exception ex)
            {

                Console.WriteLine("您输入有误:{0}",ex.Message);
            }
        }
    }
    //抽象产品类,定义抽象方法
    public abstract class Drink
    {
        public abstract string ShowDrink();
    }
    //具体产品类
    class kele : Drink
    {
        public override string ShowDrink()
        {
            return "我是可口可乐";
        }
    }
     //具体产品类
    class xuebi : Drink
    {
        public override string ShowDrink()
        {
            return "我是雪碧";
        }
    }
     //具体产品类
    class yibao : Drink
    {
        public override string ShowDrink()
        {
            return "我是怡宝";
        }
    }
    //工厂类
    public class DrinkFactory
    {
        public static Drink CreateDrink(string type)
        {
            Drink dir = null;
            switch (type)
            {
                case "可乐": dir = new kele(); break;
                case "雪碧": dir = new xuebi(); break;
                case "怡宝": dir = new yibao(); break;
                default: break;
            }
            return dir;
        }
    }
}

/*output:
我是可口可乐
我是雪碧
我是怡宝
*/

简单工厂模式的优缺点

优点:实现创建和使用分离。客户端不用知道所创建的具体产品类名,只需要知道具体产品类对应的参数。

缺点:Factory类中集中所有具体产品的创建逻辑,职责过重。一旦需要添加新的具体产品,则需要修改Factory逻辑。这样违背了开放-关闭原则。使用了静态方法,Factory类无法形成基于继承的结构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值