工厂模式
- 将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目依赖关系的解耦,从而提高项目的扩展和维护性。
- 创建对象实例时,不去直接new,而是把这个new类的动作放到一个工厂方法中。
- 不让类继承具体类,而是继承抽象类或者是实现接口。
- 不要覆盖基类中已经实现的方法。
简单工厂模式
简单工厂模式属于创建型模式,是工厂模式的一种。是工厂模式家族中最简单实用的模式。
简单工厂模式:定义一个创建对象的类,由这个类来封装实例化对象的行为。
写一个计算器的例子:
//定义一个操作基类public abstract class Operation {private double number_a;private double number_b;public abstract double getResult();// 省略getter setter方法...}//加法运算类public class OperationAdd extends Operation{@Overridepublic double getResult() {return getNumber_a()+getNumber_b();}}//减法运算类public class OperationSub extends Operation{@Overridepublic double getResult() {return getNumber_a()-getNumber_b();}}//静态工厂类public class Operationfactory {public static Operation createOperate(String operate){Operation oper = null;if(operate == "+"){oper = new OperationAdd();}else if(operate == "-"){oper = new OperationSub();}return oper;}}//计算测试public class SimpleFactory {public static void main(String[] args) {Operation oper;oper = Operationfactory.createOperate("+");oper.setNumber_a(5.5);oper.setNumber_b(3.4);double result = oper.getResult();System.out.println(result); //8.9}}
工厂方法模式
工厂方法模式:定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类。
将上面的代码进行改进,就是不要那个Operationfactory静态工厂类了。
//定义一个操作基类public abstract class Operation {private double number_a;private double number_b;public abstract double getResult();// 省略getter setter方法...}//加法运算类public class OperationAdd extends Operation{@Overridepublic double getResult() {return getNumber_a()+getNumber_b();}}//定义一个创建操作符的接口public interface FactoryFunction {Operation createOperation();}//加法操作符工厂实现这个接口 在这个工厂里返回对象public class AddFactory implements FactoryFunction{@Overridepublic Operation createOperation() {return new OperationAdd();}}public static void main(String[] args) {//获取操作符的时候用加法工厂获取对象FactoryFunction factory = new AddFactory();Operation oper = factory.createOperation();oper.setNumber_a(5.5);oper.setNumber_b(3.4);double result = oper.getResult();System.out.println(result); //8.9}
抽象工厂模式
抽象工厂模式:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。
从设计层面看,抽象工厂模式就是对简单工厂模式的改进,或者说是进一步的抽象。将工厂抽象成两层,分为抽象工厂和具体实现的子类工厂。这样将单个的简单工厂类变成了工厂簇,更利于代码的维护和扩展。

