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

    一、简单工厂模式

       1、起因

        最近在看一本大话设计模式一书,感觉上面讲述的富有故事性,引导你一步一步的走进设计模式的世界。首先我先看到的是简单工厂模式,对此我想给自己做一个总结,给自己做一个提示。

       2、代码

        简单介绍一下功能:用面向对象的思想做一个简单的计算器,实现的方式自己选择。

        首先这是一个用到了面向对象的思想,我们知道面向对象的设计思想就是:封装、继承、多态。这样做的好处就是为了程序的扩展性和代码复用性。可以实现松耦合。

      (1)下面是运算抽象类,和继承它的子类(加法,减法,乘法,除法)

    /**
     * 运算抽象类
     * @author lixiaochao
     *
     */
    public abstract class Operation {
        
        protected double _numberA = 0;
        protected 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(){
            double result = 0;
            return result;
        }
        
    }
    /**
     * 加法运算
     * @author lixiaochao
     *
     */
    class OperationAdd extends Operation{
        
        public double getResult(){
            return _numberA + _numberB;
        }
    }
    /**
     * 减法运算
     * @author lixiaochao
     *
     */
    class OperationSub extends Operation{
        public double getResult(){
            return _numberA - _numberB;
        }
    }
    /**
     * 乘法运算
     * @author lixiaochao
     */
    class OperationMul extends Operation{
        public double getResult(){
            return _numberA * _numberB;
        }
    }
    /**
     * 除法运算
     * @author lixiaochao
     *
     */
    class OperationDiv extends Operation{
        public double getResult(){
            if(_numberB == 0){
                throw new RuntimeException("被除数不能为0");
            }
            return _numberA / _numberB;
        }
    }

      (3)下面是简单工厂的实现类。

    /**
     * 简单工厂模式
     * @author lixiaochao
     *
     */
    public class OperationFactory {
        public static Operation createOperation(String operate){
            Operation oper = null;
            switch(operate){
            case "+" : oper = new OperationAdd();break;
            case "-" : oper = new OperationSub();break;
            case "*" : oper = new OperationMul();break;
            case "/" : oper = new OperationDiv();break;
            }
            return oper;
        }
    }

      (4)简单工厂的测试方法

    /**
     * 简单工厂模式测试
     * @author lixiaochao
     *
     */
    public class SimpleFactoryTest {
        public static void main(String[] args) {
            Operation oper ;
            String operate = "*";
            oper = OperationFactory.createOperation(operate);
            oper.set_numberA(8);
            oper.set_numberB(2);
            double result = oper.getResult();
            System.out.println(oper.get_numberA()
                    +operate+oper.get_numberB()+" 的结果是:"+result);
        }
    }

     (3)结果是:

    3、总结

    简单工厂方法:个人理解为由工厂方法代理根据要求生成我们所需要的对象。这样有利于代码的复用性和可扩展性。

    4、简单记录,方便记忆。做事细心,方无愧我心。不足之处,还望大神指点。

  • 相关阅读:
    Sprite子节点透明度不能跟随父节点变化的问题求解(转)
    cocos2dx模拟器修改窗口大小
    VS中拒绝在if语句中赋值 (转)
    cocos2dx 开启控制台
    (原创)动态内存管理练习 C++ std::vector<int> 模拟实现
    cocos2dx-lua 圆角矩形 圆角图片 drawNode
    cocos2dx-lua 裁剪ClippingNode,圆形头像,其他形状图片
    cocos2dx-lua 文件操作
    (原创)cocos2dx-lua TableView官方demo分析
    lua table表判断是否为空
  • 原文地址:https://www.cnblogs.com/lixiaochao/p/5787634.html
Copyright © 2011-2022 走看看