简单工厂模式

作为一名菜鸟,当遇到某个需求时,脑海里闪现的是如何实现代码逻辑,然后就开始挥笔,用代码改变世界。

但菜鸟不会永远都是菜鸟,也有梦想,梦想着有一天变成大牛,将世界改变的更好。在变成大牛的路上,有一段叫做“设计模式”,是必经之路。

良好的代码需要有以下特点:

可维护;

可复用;

可扩展;

灵活性好;

简单工厂模式:通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。比如我是消费者,我需要不同种类的衣服,我只需要将我的需求告诉生产商,生产商就会根据我的需求进行生成。对于消费者而言,并不需要知道生产的过程。

下面通过实现简单的两位数的计算,来熟悉简单工厂模式:

1> 建立运算类:

package factorytest;

/**
 *
 * @author 阿正
 */
public class Operation {
    public double numberA;
    public double numberB;
    
    public  double getResult(){
        double result = 0;
        return result;
    }
}

2> 创建具体的运算类,继承运算类:

package factorytest;

/**
 *
 * @author 阿正
 */
public class OperationAdd extends Operation{

    @Override
    public double getResult() {
        double result = 0;
        result = numberA + numberB;
        return result;
    }
    
}
package factorytest;

/**
 *
 * @author 阿正
 */
public class OperationSub extends Operation{

    @Override
    public double getResult() {
        double result = 0;
        result = numberA - numberB;
        return result;
    }
    
}
package factorytest;

/**
 *
 * @author 阿正
 */
public class OperationMul extends Operation{

    @Override
    public double getResult() {
        double result = 0;
        result = numberA * numberB;
        return result;
    }
    
}
package factorytest;

/**
 *
 * @author 阿正
 */
public class OperationDiv extends Operation{

    @Override
    public double getResult() {
        double result = 0;
        try{
           result = numberA / numberB;
        }catch(Exception x){
            x.printStackTrace();
        }
        return result;
    }
    
}

3> 创建一个工厂类Factory,用于实例化不同的运算类:

package factorytest;

/**
 *
 * @author 阿正
 */
public class Factory {
    public static Operation getOperation(String operation){
        Operation oper = null;
        switch (operation){
            case "+":
                oper = new OperationAdd();
                break;
            case "-":
                oper = new OperationSub();
                break;
            case "*":
                oper = new OperationMul();
                break;
            case "/":
                oper = new OperationDiv();
                break;
        }
        return oper;
    }
}

4> 创建客户端,进行不同的运算:

package factorytest;

/**
 *
 * @author 阿正
 */
public class FactoryTest {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Operation oper = null;
        oper = Factory.getOperation("-");
        oper.numberA = 1;
        oper.numberB = 2;
        double result = oper.getResult();
        System.out.println(result);
    }
    
}

更多关于工厂模式,参考:http://blog.csdn.net/weiwenlongll/article/details/6918164

posted @ 2017-04-18 17:31  小猪阿正  阅读(130)  评论(0编辑  收藏  举报