zoukankan      html  css  js  c++  java
  • 简单工厂模式 SimpleFactory

     简单工厂模式 SimpleFactory

    1.1什么是简单工厂设计模式
    简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。(来源百度百科)
    1.2简单工厂模式的UML图
     
    1.3UML图中的角色及其职责
    工厂(Creator)角色
    简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。
    抽象产品(Product)角色
    简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
    具体产品(Concrete Product)角色
    是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
     
    2.1实例
    我们使用简单工厂设计模式实现一个计算器控制台程序,要求输入两个数和一个运算符号,得出结果
    Operation运算类
    package dp01SimpleFactory;
    
    public class Operation {
        protected int numA;
        protected int numB;
        public int getNumA() {
            return numA;
        }
        public void setNumA(int numA) {
            this.numA = numA;
        }
        public int getNumB() {
            return numB;
        }
        public void setNumB(int numB) {
            this.numB = numB;
        }
        public int getResult(){
            int result=0;
            return result;
        }
    }
    四个预算类的加减乘除子类
    加法类
    package dp01SimpleFactory;
    
    public class OperationAdd extends Operation{
        public int getResult() {
            int result = numA+numB;
            return result;
        }
    }
    减法类
    package dp01SimpleFactory;
    
    public class OperationSub extends Operation{
        public int getResult() {
            int result = numA-numB;
            return result;
        }
    }
    乘法类
    package dp01SimpleFactory;
    
    public class OperationMul extends Operation{
        public int getResult() {
            int result = numA*numB;
            return result;
        }
    }
    除法类
    package dp01SimpleFactory;
    
    public class OperationDiv extends Operation{
        public int getResult() {
            if(numB==0){
                try {
                    throw new Exception("除数不能为0");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            int result = numA/numB;
            return result;
        }
    }
    工厂类
     
    package dp01SimpleFactory;
    
    public class OperationFactory {
        
        public static Operation createOperation(String operator){
            Operation oper=null;
            switch (operator) {
            case "+":
                oper=new OperationAdd();
                break;
            case "-":
                oper=new OperationSub();
                break;
            case "*":
                oper=new OperationMul();
                break;
            case "/":
                oper=new OperationDiv();
                break;
            }
            return oper;
        }
    }
    测试方法类
    package dp01SimpleFactory;
     
    public class Program {
         public static void main(String[] args) {
              Operation oper= OperationFactory.createOperation("/");
              oper.setNumA(5);
              oper.setNumB(7);
              int result = oper.getResult();
              System.out.println(result);
         }
    }
    我们只需要输入运算符号,工厂就实例化出合适的对象,通过多态,返回父类的方式实现计算器的结果!
     
     
     
     
     
     
     
  • 相关阅读:
    理解Android系统的进程间通信原理(一)----RPC中的代理模式
    Android系列之Android 命令行手动编译打包详解
    CodeForces 681B Economy Game (暴力)
    CodeForces 681A A Good Contest (水题)
    UVa 1614 Hell on the Markets (贪心+推理)
    UVa 247 Calling Circles (DFS+Floyd)
    UVa 1151 Buy or Build (最小生成树+二进制法暴力求解)
    UVa 1395 Slim Span (最小生成树)
    HDU 1071 The area (数学定积分)
    HDU 1286 找新朋友 (欧拉phi函数打表)
  • 原文地址:https://www.cnblogs.com/lizhaowen/p/6699436.html
Copyright © 2011-2022 走看看