• 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. 简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构。
  • 相关阅读:
    微信开发SDK使用教程--手机微信群聊新增通知服务端
    微信开发SDK使用教程--手机微信联系人信息上传服务端
    微信开发SDK使用教程--手机端接收发送朋友圈任务指令后数据回传服务端
    微信二次开发SDK使用教程--手机端向服务端发送回复朋友圈评论任务反馈服务端
    js 自执行匿名函数(转载)
    js继承中,原型属性的继承探究
    搭建邮件服务器和使用压测工具的总结
    window.onload和window.document.readystate的探究
    读艾伦的jQuery的无new构建,疑惑分析——jquery源码学习一
    WPF页面 全球化和本地化
  • 原文地址:https://www.cnblogs.com/taochen-go/p/9323710.html
Copyright © 2020-2023  润新知