zoukankan      html  css  js  c++  java
  • java设计模式之一(简单工厂模式)


    运算类
    public class Operation {


    protected int numberA;

    protected int numberB;


    public double getReslut(){

    double result=0;

    return result;
    }


    public int getNumberA() {
    return numberA;
    }

    public void setNumberA(int numberA) {
    this.numberA = numberA;
    }

    public int getNumberB() {
    return numberB;
    }

    public void setNumberB(int numberB) {
    this.numberB = numberB;
    }
    }


    ------工厂类------
    public class OperationFactory {

    public static Operation createOperation(String type){

    Operation oper=null;
    switch(type){
    case "+":
    oper=new OperationAdd();
    break;
    case "-":
    oper=new OperationDiv();
    break;
    default: break;
    }
    return oper;
    }

    }

    -----加法运算类继承算法类----
    public class OperationAdd extends Operation {

    public double getReslut(){

    double result=numberA+numberB;

    return result;
    }

    }

    ----减法运算类继承算法类----
    public class OperationDiv extends Operation {


    public double getReslut(){

    double result=numberA-numberB;
    return result;
    }
    }

    -----客户端代码---
    @Test
    public void GeneralTest() {

    OperationFactory factory=new OperationFactory();

    Operation oper= factory.createOperation("+");
    oper.numberA=10;
    oper.numberB=8;
    double result=oper.getReslut();

    System.out.println(result);
    }

    应用场景:

      当没有使用工厂模式的时候,每个“产品”类都是分散的,没有使用一个工厂接口把它们整合起来,而且,加入例子里面生产productA需要传入三个“原料”参数,使用者要清晰地知道这些参数才能把productA类实例化,每个产品参数不同的话,会让使用者非常凌乱,使用“工厂”则可以把参数封装在里面,让使用者不用知道具体参数就可以实例化出所需要的“产品”类。

    优点:

    将创建实例的工作与使用实例的工作分开,使用者不必关心类对象如何创建,明确了职责。

    把初始化实例时的工作放到工厂里进行,使代码更容易维护。 更符合面向对象的原则,面向接口编程,而不是面向实现编程。

    缺点:

    1. 由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
    2. 要新增产品类的时候,就要修改工厂类的代码,违反了开放封闭原则(对扩展的开放,对修改的关闭)。
    3. 简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构。
  • 相关阅读:
    *****Exercise 4.1 Generate a multiplication table
    Exercise 3.4 A calculator that allows multiple calculations
    Exercise 3.3 Calculate a discounted price
    Exercise 3.2 Display a date
    理解Java异常处理机制
    eclipse远程Debug配置
    [转]java代码性能优化总结
    [转]A星寻路算法
    JVM参数配置
    Gradle笔记(1) 安装
  • 原文地址:https://www.cnblogs.com/taochen-go/p/9323710.html
Copyright © 2011-2022 走看看