美文网首页
大话设计模式-简单工厂模式-2020-09-08

大话设计模式-简单工厂模式-2020-09-08

作者: 勇往直前888 | 来源:发表于2020-09-08 16:03 被阅读0次

    面向对象的好处

    通过活字印刷的例子,来说明面向对象的好处。

    1. 可维护: 要改,只需要改要改之字,其他的不用动;
    2. 可复用: 这些字并非用完这次就无用,完全可以在后来的印刷中重复使用;
    3. 可扩展: 若是要加字,只需要另刻字加入即可;
    4. 灵活性好: 字的排列可能是竖排,也可能是横排,此时只需要将活字移动就可以满足需求;
    • 通过封装、继承、多态把程序的耦合度降低;

    • 用设计模式使得程序更加的灵活,容易修改,并且易于复用

    计算器的例子

    简单工厂模式,用一个单独的类来进行这个创造实例的过程,这就是工厂。将运算符号输入工厂,得到对应的运算子类,通过多态,直接使用父类的getResult方法实际上是子类的getResult方法。

    简单工厂
    1. 封装:基类用来对业务进行封装,比如运算类Operation
        ///Operation运算类
        public class Operation
        {
            public double NumberA { get; set; }
    
            public double NumberB { get; set; }
    
            public virtual double GetResult()
            {
                double result = 0;
                return result;
            }
        }
    
    1. 继承:派生类实现各种具体业务场景,比如加、减、乘、除各种具体的运算
    ///加减乘除类
        ///加法类
        public class OperationAdd : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = this.NumberA + this.NumberB;
                return result;
            }
        }
        ///减法类
        public class OperationSub : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = this.NumberA - this.NumberB;
                return result;
            }
        }
    
        /// <summary>
        /// 乘法类
        /// </summary>
        public class OperationMul : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = this.NumberA * this.NumberB;
                return result;
            }
        }
    
        /// <summary>
        /// 除法类
        /// </summary>
        public class OperationDiv : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                if (this.NumberB == 0)
                {
                    throw new Exception("除数不能为0。");
                }
                result = this.NumberA / this.NumberB;
                return result;
            }
        }
    
    1. 多态:简单工厂类,根据条件,创建符合条件的派生类。比如这里用+-*/的字符代表加减乘除等派生类。
        ///简单工厂类
        public class OperationFactory
        {
            public static Operation CreateOperate(string operate)
            {
                Operation Oper = null;
                switch (operate)
                { 
                    case"+":
                        Oper = new OperationAdd();
                        break;
                    case"-":
                        Oper = new OperationSub();
                        break;
                    case"*":
                        Oper = new OperationMul();
                        break;
                    case"/":
                        Oper = new OperationDiv();
                        break;
                }
                return Oper;
            }
        }
    

    简单工厂是一种派生类实例集中创建的方法。这是一个非常体现面向对象封装、继承、多态等特性的例子。

    设计模式之二(简单工厂模式)

    UML 类图

    UML例子
    • 继承: 空心三角形+实线;箭头指向为被继承的,也就是父类;
      实现接口: 空心三角形和虚线;箭头指向为被实现的,也就是接口;
    继承 实现接口
    • 关联: 实线剪头;一般作为属性成员,箭头指向属性;
      依赖: 虚线箭头;一般作为方法的参数,箭头指向参数;
    关联 依赖
    • 聚合: 空心的菱形加箭头;群体和个体的关系;菱形指向群体;箭头指向个体;群体中包含一个数组,数组成员是个体
      组合: 实心的菱形加箭头;整体和部分的关系;菱形指向整体;箭头指向部分;部分作为整体的一个属性成员,并且在构造函数中同时构造;
    聚合 组合

    单向关联用箭头,双向不用。

    image.png

    Demo

    这是用Android写的大话设计模式里面的例子
    https://gitee.com/zhangxusong888/Android/tree/master/design_pattern

    参考文章

    大话设计模式第一章之:工厂模式
    设计模式之前奏(UML类图)
    大话设计模式阅读笔记

    相关文章

      网友评论

          本文标题:大话设计模式-简单工厂模式-2020-09-08

          本文链接:https://www.haomeiwen.com/subject/frhdektx.html