大话设计模式:简单工厂

一、什么是简单工厂
提供创建对象的接口

简单工厂并不是GOF23个设计模式中的一种,但它亦有使用价值。
简单来说就是一个类型的许多子类,可以通过同一个工厂创建方法按需创建。

UML图

在这里插入图片描述

二、适用场景

当隔绝具体实现,想将实例的创建集中管理和控制,让创建者不用关心实例怎么创建的。

三、优缺点

优点
帮助封装。客户端可以更好的面向接口编程。
解耦。客户端不需要知道实现类。
缺点
需要理解参数的意义,增加复杂度。
不方便扩展子类。一旦添加新产品就不得不修改工厂逻辑。

四、大话中的例子

计算机运算类作为父类,继承它的为加法类、减法类、乘法类、除法类等,简单工厂负责创建这些子类,根据传递过来的参数case分支判断类型。

五、我的例子
using System;

namespace SimpleFactory
{
    class Program
    {
        static void Main(string[] args)
        {
            UchihaFamily sasuke = UchihaFactory.CreatePerson(UchihaPerson.Sasuke);//用简单工厂创建sasuke
            sasuke.UseSkill();//使用技能
            UchihaFamily itachi = UchihaFactory.CreatePerson(UchihaPerson.Itachi);//用简单工厂创建itachi
            itachi.UseSkill();//使用技能
            Console.ReadKey();
        }
    }

    public abstract class UchihaFamily//抽象父类
    {
       public string name;
        public UchihaFamily(string name)
        {
            this.name = name;
        }
        public abstract void UseSkill();//共有的方法使用技能
    }
    class Sasuke : UchihaFamily
    {
        public Sasuke(string name) : base(name)
        {
        }
        public override void UseSkill()
        {
            Console.WriteLine( name+":千鸟");
        }
    }
    class Itachi : UchihaFamily
    {
        public Itachi(string name) : base(name)
        {
        }
        public override void UseSkill()
        {
            Console.WriteLine(name + ":豪火球之术");
        }
    }

    public class UchihaFactory
    {
        public static UchihaFamily CreatePerson(UchihaPerson person)
        {
            UchihaFamily uchiha = null;
            switch (person)//以枚举来switch
            {
                case UchihaPerson.Sasuke:
                    uchiha = new Sasuke("佐助");
                    break;
                case UchihaPerson.Itachi:
                    uchiha = new Itachi("鼬");
                    break;
            }
            return uchiha;
        }
    }
    public enum UchihaPerson//家族成员枚举
    {
        Sasuke,
        Itachi,
    }

}

运行结果

在这里插入图片描述

PS:要不要符合可以无限次创建的条件,感觉不需要,做加法的,拿同一个加法实例 放进去两个值就好了。不需要再创建一个新的加法实例。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值