大话设计模式之简单工厂模式

一、简单工厂模式

   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、简单记录,方便记忆。做事细心,方无愧我心。不足之处,还望大神指点。

原文地址:https://www.cnblogs.com/lixiaochao/p/5787634.html