zoukankan      html  css  js  c++  java
  • [置顶] 设计模式之工厂方法模式

           上篇讲到装饰模式,下面这篇来讲一下设计模式当中非常重要的一个模式,工厂方法模式

             讲工厂模式就不得不说一下简单工厂了,简单工厂就是定义一个工厂类,用来生产一些实例,而工厂模式的操作也是这样的,但是工厂方法模式,会将这个工厂继续进行细分,看一下下面的简单工厂与工厂方法模式的类图。

                                  

                      

          

            通过图大家可以看到,简单工厂就是一个大的工厂,他能生产除法类,乘法类,加法类,减法类,工厂类功能比较多,但是写起来比较简单。而工厂方法模式,是将工厂继续细分四个工厂,分别为加减乘除工厂,用来生产加减乘除类。功能单一,但是代码繁琐。

            如果系统完成以后,需求上又要增加一个开方类,这个时候,简单工厂就不符合开放封闭原则(作一个连接)了。所以工厂方法类这样使得职责更加的单一。每个小的工厂类所具有的功能更少,更加容易维护,扩展。更加的符合面向对象的思想。

           下面举一个工厂方法的例子,

      //运算类
        public class Operation
        {
            private double _numberA = 0;
            private double _numberB = 0;
            public double NumberA
            {
                get { return _numberA; }
                set { _numberA = value; }
            }
            public double NumberB
            {
                get { return _numberB; }
                set { _numberB = value; }
            }
            public virtual double GetResult()//虚方法
            {
                double result = 0;
                return result;
            }
        }
        //加减乘数类
        class OperationAdd : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberA + NumberB;
                return result;
            }
        }
    
        class OperationSub : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberA - NumberB;
                return result;
            }
        }
        class OperationMul : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberA * NumberB;
                return result;
            }
        }
        class OperationDiv : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                if (NumberB == 0)
                {
                    throw new Exception("除数不能为0");
                }
                result = NumberA / NumberB;
                return result;
            }
        }
    
      //工厂接口
        interface IFactory
        {
            Operation CreateOperation();
        }
        //加法工厂
        class AddFactory : IFactory
        {
            public Operation CreateOperation()
            {
                return new OperationAdd();
            }
        }
        //减发工厂
        class SubFactory : IFactory
        {
            public Operation CreateOperation()
            {
                return new OperationSub();
            }
        }
        //乘法工厂
        class MulFactory : IFactory
        {
            public Operation CreateOperation()
            {
                return new OperationMul();
            }
        }
        //除法工厂
        class DivFactory : IFactory
        {
            public Operation CreateOperation()
            {
                return new OperationDiv();
            }
        }
          //客户端
            static void Main(string[] args)
            {
                IFactory operFactory = new AddFactory();
                Operation oper = operFactory.CreateOperation();
                oper.NumberA = 1;
                oper.NumberB = 2;
                double result = oper.GetResult();
                Console.WriteLine(result);
            }


              这样将判断的工作交给客户端来做,不用实现将所有的类实例化好,而是需要那类,然后再去进行实例化。这样就会留有更多资源进行其他工作。当然最主要的还是因为工厂方法模式符合面向对象编程的思想,

            面向接口编程:设计模式的一个重要原则是针对接口编程,不要依赖实现类
            开闭原则(Open-Closed Principle,OCP) “Software entities should be open for extension,but closed for modification”。翻译过来就是:“软件实体应当对扩展开放,对修改关闭”。这句话说得略微有点专业,我们把它讲得更通俗一点,也就是:软件系统中包含的各种组件,例如模块(Modules)、类(Classes)以及功(Functions)等等,应该在不修改现有代码的基础上,引入新功能。开闭原则中“开”,是指对于组件功能的扩展是开放的,是允许对其进行功能扩展的;开闭原则中“闭”,是指对于原有代码的修改是封闭的,即不应该修改原有的代码。

           设计模式就是更好的去应用编程思想当中的原则。 希望此文章能都对您有帮助。

           



     

           

  • 相关阅读:
    Java进阶7并发优化4——JDK并发数据结构
    Java 进阶7 并行优化 JDK多任务执行框架技术
    Java进阶7 并发优化2 并行程序设计模式
    Java 进阶7 并发优化 1 并行程序的设计模式
    Java 进阶6 异常处理的陷阱
    Algorithm3: 获得一个int数中二进制位为1 的个数
    Algorithm2: 重复查过半数的元素
    Algorithm1: 全排列
    Java进阶5 面向对象的陷阱
    Java进阶2 数组内存和对象的内存管理知识
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3481657.html
Copyright © 2011-2022 走看看