zoukankan      html  css  js  c++  java
  • 设计模式3 简单工厂模式

    简单工厂含义

    简单工厂模式又称静态方法模式,可以将其理解为生产对象的一个类,称为工厂类。

    解决的问题

    将“类实例化的操作”与“使用对象的操作”分开,让使用者不用知道具体参数就可以实例化出所需要的“产品”类,从而避免了在客户端代码中显式指定,同时如果代码中多处使用到这个类,修改时就只在一个地方修改就可以了,达到了解耦的效果。

    UML

    代码实现

    抽象计算类

    public interface Calculation {
        double calculate(double num1,double num2);
    }
    
    

    具体计算类--加法类

    public class PlusCalculation implements Calculation{
        @Override
        public double calculate(double num1, double num2) {
            return num1+num2;
        }
    }
    
    

    具体计算类--减法类

    public class SubCalculation implements Calculation {
    
        @Override
        public double calculate(double num1, double num2) {
            return num1-num2;
        }
    }
    
    

    工厂类

    public class CalculationFactory  {
       public static Calculation create(char ch){
           Calculation calculation= null;
           switch (ch){
               case '+':calculation =  new PlusCalculation();break;
               case '-':calculation =  new SubCalculation();break;
           }
           return calculation;
       }
    }
    

    缺点

    违背“开放关闭原则”,一旦添加新产品就不得不修改工厂类的逻辑,这样就会造成工厂逻辑过于复杂。

    应用场景:

    1. 客户如果只知道传入工厂类的参数(用于确定实例化哪一个类的对象),对于如何创建对象的逻辑不关心时
    2. 当工厂类负责创建的对象(具体产品)比较少时
  • 相关阅读:
    UVA-1623 Enter The Dragon (贪心)
    UVA-1619 Feel Good (单调队列)
    UVA-11536 Smallest Sub-Array
    UVA-1617 Laptop (贪心)
    UVA-10570 Meeting with Aliens (枚举+贪心)
    UVA-1153 Keep the Customer Satisfied (贪心)
    UVA-1614 Hell on the Markets(贪心+推理) (有待补充)
    UVA-1613 K-Graph Oddity (着色问题)
    UVA-1612 Guess (贪心)
    todo:open和fopen的区别
  • 原文地址:https://www.cnblogs.com/zhangchenwei/p/12561900.html
Copyright © 2011-2022 走看看