java设计模式之简单工厂模式

工厂是一种创建型的设计模式,常用于封装变化,一般遵循那里有变化就封装那里的原则。
简单工厂模式又 叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
创建对象实例时,不要直接 new 类, 而是把这个 new 类的动作放在一个工厂的方法中,并返回。
不要让类继承具体类,而是继承抽象类或者是实现 interface(接口)
不要覆盖基类中已经实现的方法。

以一个java面试题为例 --> 使用java实现一个计算机+-*/,得到结果。
常规写法:
package com.ytkj.design.model.factory.calculate;

/**
 * 以一个java面试题为例 --> 使用java实现一个计算机加减乘除得到结果
 */
public class Computer {
    private String calculate;//计算符号

    public String getCalculate() {
        return calculate;
    }

    public void setCalculate(String calculate) {
        this.calculate = calculate;
    }

    public int getResult(int a, int b) {
        if ("+".equals(calculate)) {
            return a + b;
        } else if ("-".equals(calculate)) {
            return a - b;
        } else if ("*".equals(calculate)) {
            return a * b;
        } else {
            return a / b;
        }
    }
}

class Test {
    public static void main(String[] args) {
        Computer computer = new Computer();
        computer.setCalculate("-");
        int result = computer.getResult(10, 20);
        System.out.println(result);
    }

}
/*
上面的写法实现虽然简单,但是却没有面向对象的特性,代码拓展性差。
(工厂模式一般遵循那里有变化就封装那里的原则),在面向对象编程语言中,一切都是对象,所以上面 运算符号(既然这里有变化那么我们就进行封装)  也应当作对象来处理。
 */

改进:

public interface Operation {
    int getResult(int a,int b);
}
public class Add implements Operation {
    @Override
    public int getResult(int a, int b) {
        return a+b;
    }
}
public class Subtraction implements Operation {
    @Override
    public int getResult(int a, int b) {
        return a-b;
    }
}
public class Multiplication implements Operation {
    @Override
    public int getResult(int a, int b) {
        return a*b;
    }
}
public class Division implements Operation {
    @Override
    public int getResult(int a, int b) {
        return a/b;
    }
}
package com.ytkj.design.model.factory.calculate.improve;

/**
 * 使用简单工厂模式实现根据不同的情况创建不同的对象。
 */
public class SimpleFactory {
    public static Operation getOperation(String operation) {
        switch (operation) {
            case "+":
                return new Add();
            case "-":
                return new Subtraction();
            case "*":
                return new Multiplication();
            default:
                return new Division();
        }
    }
}

class Test{
    public static void main(String[] args) {
        Operation operation = SimpleFactory.getOperation("+");
        int result = operation.getResult(6, 2);
        System.out.println(result);
    }
}
原文地址:https://www.cnblogs.com/yscec/p/13557354.html