zoukankan      html  css  js  c++  java
  • 简单工厂,抽象工厂,工厂方法区别

    1.简单工厂:

    简单工厂模式也叫静态工厂模式,在工厂类中包含了逻辑判断,根据客户端的选择来动态创建实例,去除了客户端对具体产品的依赖。但是如果需要添加新的产品,就需要修改工厂类,所以简单工厂违背了设计模式中的开闭原则,所以说简单工厂并不属设计模式。

    构成:

    一个包含逻辑判断的具体工厂类;

    一个抽象产品类,可以派生多个具体的产品类。

     public class OperationFactory
        {
            /// <summary>
            /// 根据传入的参数,创建对应的实例
            /// </summary>
            /// <param name="operate">计算符号,加减乘除</param>
            /// <returns>返回对应的实例</returns>
            public static Operation getOperation(string operate) {
                Operation operation = null;
                switch (operate)
                {
                    case "+":
                        operation = new 加法();
                        break;
                    case "-":
                        operation = new 减法();
                        break;
                    case "*":
                        operation = new 乘法();
                        break;
                    case "/":
                        operation = new 除法();
                        break;
                }
                return operation;
            }
        }
    View Code

    2.工厂方法模式:

    定义一个抽象工厂类,在这个抽象工厂类中负责制定一些规范,将实际创建产品工作放到到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,相对于简单工厂来说可以使系统在不修改工厂的情况下,引进新的产品。每个具体工厂类只能创建一个具体产品类的实例。

    构成:

    一个抽象产品类,可以派生出多个具体产品类。

    一个抽象工厂类,可以派生出多个具体工厂类。

    3.抽象工厂模式

    抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。相对于工厂方法模式来说,抽象工厂有多个抽象产品类,每个具体工厂类可以创建多个具体产品类的实例。而不是像工厂方法那样,一个工厂只能创建一个产品。

    构成:

    多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。

    一个抽象工厂类,可以派生出多个具体工厂类。

  • 相关阅读:
    postman使用感言
    20. 有效的括号
    13. 罗马数字转整数
    qsort / bsearch
    堆排序(heapsort)
    递归Recursion
    拓扑排序
    N/A的含义
    初级系列17.爱因斯坦的数学题问题
    初级系列16.求车速问题
  • 原文地址:https://www.cnblogs.com/ywtk/p/4222193.html
Copyright © 2011-2022 走看看