• 今天俺要说一说简单工厂模式(Simple Factory)


    前言:简单工厂不能说是设计模式,它是一种变成习惯,因为它不是23种设计模式之一,但是它在实际开发中经常用到,而且也非常简单,可以说是工厂模式的一个引导。

    大多程序员都是单身狗,为了弥补一下你们的心情,我决定用你这个对象和你对象进行讲解简单工厂

    IWifeAction.cs 接口类

    WifeHug.cs 行为类

    WifeKiss.cs 行为类

    Factory.cs 工厂类

    当你去找你老婆索要这些行为的时候,如果她愿意,她就会开始这个行为。

    IWifeAction.cs 类Code部分:

    namespace MyFactory
    {
        /// <summary>
        /// 抽象行为类:动作
        /// </summary>
        public interface IWifeAction
        {
            string GetAction();
        }
    }

    WifeKiss.cs 类 Code部分:

    public class WifeKiss : IWifeAction
        {
            public string GetAction()
            {
                return "亲亲";
            }
        }

    WifeHug.cs 类 Code部分:

    public class WifeHug : IWifeAction
        {
            public string GetAction()
            {
                return "抱抱";
            }
        }

    Factory.cs 类 Code部分:

    /// <summary>
        /// 工厂类
        /// </summary>
        public class Factory
        {
            public IWifeAction GetWifeAction(string actionName)
            {
                if (actionName.Equals("亲亲"))
                    return new WifeKiss(); 
                else if (actionName.Equals("抱抱"))
                    return new WifeHug();
                throw new Exception("大白天的你想干啥?");
            }
        }

    如果她不愿意的话,就抛一个异常。

    客户端 Code部分:

    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            IWifeAction action;
            /// <summary>
            /// 老公请求
            /// </summary>
            private void btn_Click(object sender, EventArgs e)
            {
                Factory factory = new Factory();
                //...省略选择。例如switch
                try
                {
                    action = factory.GetWifeAction("亲亲");
                    MessageBox.Show(action.GetAction());
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

    体系结构

     

    简单工厂的要点就是你传什么,它就返回什么。不需要找到那么多细节。

    优点:工厂类有必要的逻辑判断,可以决定什么时候创建一个动作类,从而客户端不需要去创建什么对象,只需要消费即可。

          客户端无需去记住具体的类名,通过简单工厂的调用可以将减少使用者记忆。

    缺点:由于工厂类包含了所有动作的创建逻辑,如果不能工作,系统则直接out;

       不利于系统扩展,例如我想要亲亲还想要看足球,则需要在if 中(switch) 添加分支.

    使用工厂模式的最好场景是:对象较少,维护简单工厂类比较方便时可考虑使用它.  

  • 相关阅读:
    vue 父子组件通信props/emit
    mvvm
    Ajax
    闭包
    【CSS3】---only-child选择器+only-of-type选择器
    【CSS3】---last-of-type选择器+nth-last-of-type(n)选择器
    【CSS3】---first-of-type选择器+nth-of-type(n)选择器
    【CSS3】---结构性伪类选择器—nth-child(n)+nth-last-child(n)
    【CSS3】---结构性伪类选择器-first-child+last-child
    vue路由切换和用location切换url的区别
  • 原文地址:https://www.cnblogs.com/ZaraNet/p/9559690.html
Copyright © 2020-2023  润新知