Java设计模式浅谈之:简单工厂模式

449 阅读1分钟

一.简单工厂模式就是对继承了同一父类的各种拓展功能子类进行封装,通过传入不同的参数判断实现不同实例化对象的模式。

二.情景模式:实现一个计算器的简单逻辑。

1.写一个算法类,这一类有两个特点:有两个待运算的数字和运算完之后需要返回一个结果。

public class Math {

     private int numberA;
     private int numberB;

    public int getNumberA() {
        return numberA;
    }

    public void setNumberA(int numberA) {
        this.numberA = numberA;
    }

    public int getNumberB() {
        return numberB;
    }

    public void setNumberB(int numberB) {
        this.numberB = numberB;
    }

    public int getResult(){
       return 0;
    }

}

2.将需要算法功能(加,减,乘,除,开根号...)写成算法的子类。这样做的目的是对于每次新增算法或者修改算法内部逻辑,不对其他的算法功能产生影响。可以做到高内聚,低耦合,以及可拓展。

//加法
class add extends Math {
    @Override
    public int getResult() {
        int numberA = getNumberA();
        int numberB = getNumberB();
        int result= numberA+numberB;
        return result;
    }
}
//减法
class sub extends Math {
    @Override
    public int getResult() {
        int numberA = getNumberA();
        int numberB = getNumberB();
        int result= numberA-numberB;
        return result;
    }
}

3.工厂类,根据客户端的参数进行实例化不同功能的对象。这里代码设置为0为加法,1为减法。

(由于JDK1.7以下不支持swith(表达式)为string,所以用int)

public class Factory {

    public Math getMath(int rule) {
        Math math=null;
        switch (rule) {
            case 0:
                math = new add();
                break;
            case 1:
                math = new sub();
                break;
            default:
                break;
        }
        return math;
    }

}

4.客户端,开始计算

public class StartCalculate {

    public static void main(String[] args) {
        Factory factory = new Factory();
        Math math = factory.getMath(1);
        math.setNumberA(3);
        math.setNumberB(7);
        int result = math.getResult();
        System.out.println(result);
    }
}

5.计算结果

-4

总结:简单工厂模式的实现,将实例的化对象的过程进行了封装,并且对于同一类算法的拓展提供了良好的拓展性。