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

    简单工厂模式:属于创建型模式又叫做静态工厂方法模式,它属于类创建型模式

    简单工厂模式中:根据参数的不同返回不同类的实例

    简单工厂模式:专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类

    package designPattern;
    /**
     * Operation 运算类:
     * 创建的实例通常都具有共同的父类
     */
    public class Operation {
    
        private double _numberA=0;
        private double _numberB=0;
    
        public double get_numberA() {
            return _numberA;
        }
    
        public void set_numberA(double _numberA) {
            this._numberA = _numberA;
        }
    
        public double get_numberB() {
            return _numberB;
        }
    
        public void set_numberB(double _numberB) {
            this._numberB = _numberB;
        }
    
        public double GetResult() throws Exception {
            double result=0;
            return result;
        }
    }
    /**
     * 加法运算类,继承运算类
     */
    class OperationAdd extends Operation{
        /**
         * 重写 Operation 运算类 的 GetResult方法
         * @return result
         */
        public double GetResult(){
    
            double result=0;
            result=get_numberA()+get_numberB();
            return result;
        }
    }
    /**
     * 减法运算类,继承运算类
     */
    class OperationSub extends Operation{
        /**
         * 重写 Operation 运算类 的 GetResult方法
         * @return result
         */
        public double GetResult(){
    
            double result=0;
            result=get_numberA()-get_numberB();
            return result;
        }
    }
    /**
     * 乘法运算类,继承运算类
     */
    class OperationMul extends Operation{
        /**
         * 重写 Operation 运算类 的 GetResult方法
         * @return result
         */
        public double GetResult(){
    
            double result=0;
            result=get_numberA()*get_numberB();
            return result;
        }
    }
    /**
     * 除法运算类,继承运算类
     */
    class OperationDiv extends Operation{
        /**
         * 重写 Operation 运算类 的 GetResult方法
         * @return result
         */
        public double GetResult() throws Exception {
    
            double result=0;
            if(get_numberB()==0)
                throw new Exception("除数不能为0.");
    
            result=get_numberA()/get_numberB();
            return result;
        }
    }
    Operation父子类
    package designPattern;
    /**
     * 算法工厂:
     * 专门定义一个类来负责创建其他类的实例
     */
    public class OperationFactory {
        public static Operation createOperate(String operate){
            Operation operation = null;
            switch (operate){
                case "+":
                    operation=new OperationAdd();
                    break;
                case "-":
                    operation=new OperationSub();
                    break;
                case "*":
                    operation=new OperationMul();
                    break;
                case "/":
                    operation=new OperationDiv();
                    break;
            }
            return operation;
        }
    
        public static void main(String[] args) {
            Operation operation;
            //根据参数的不同返回不同类的实例
            operation =OperationFactory.createOperate("+");
            operation.set_numberA(1);
            operation.set_numberB(2);
            try {
                double result=operation.GetResult();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    OperationFactory算法工厂和主函数
  • 相关阅读:
    ER图转关系模式, 强制参与和选择参与
    panoramio
    as3中flash的静态文本是可以直接访问的
    城市战3操作很失败
    20111120杭州天地行
    XNA 实用教程
    十、样式
    十三、“自己”的动画——图片转换
    十三、“导航”的动画——页面跳转
    十三、“自己”的动画——按钮
  • 原文地址:https://www.cnblogs.com/mww-NOTCOPY/p/12635829.html
Copyright © 2011-2022 走看看