《大话设计模式》学习笔记5:工厂方法模式

  

计算器示例:

  

1.运算类:

    public class Operation
    {
        public double NumberA { get; set; }
        public double NumberB { get; set; }
        public virtual double GetResult()
        {
            return 0;
        }
    }

2.加减乘除类(以加法类为例):

    public class AddOperation : Operation
    {
        public override double GetResult()
        {
            return NumberA + NumberB;
        }
    }

3.工厂类接口:

    public interface IFactory
    {
        Operation CreateOperation();
    }

4.加减乘除工厂(以加法工厂为例):

    public class AddFactory:IFactory
    {
        public Operation CreateOperation()
        {
            return new AddOperation();
        }
    }

5.客户端代码:

    class Program
    {
        static void Main(string[] args)
        {
            IFactory operFactory = new AddFactory();
            Operation oper = operFactory.CreateOperation();
            oper.NumberA = 1;
            oper.NumberB = 2;
            Console.WriteLine(oper.GetResult());
        }
    }

  简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。缺点是违背了开放-封闭原则。

  工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断转移到了客户端代码来进行。

原文地址:https://www.cnblogs.com/walden1024/p/4487957.html