工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 工厂模式分为三类: 1.简单工厂模式(Simple Factory) 2.工厂方法模式(Factory Method) 3.抽象工厂模式(Abstract Factory) 简单工厂其实不是一个标准的的设计模式。GOF 23 种设计模式中只有「工厂方法模式」与「抽象工厂模式」。简单工厂模式可以看为工厂方法模式的一种特例,为了统一整理学习,就都归为工厂模式。这三种工厂模式在设计模式的分类中都属于创建型模式,三种模式从上到下逐步抽象。
工厂模式的优点: 1.可以使代码结构清晰,有效的封装变化。 2.对调用者屏蔽具体的产品类。 3.降低耦合度。
适用场景: 1.在任何需要生成复杂对象的地方。 2.调用者字节组装产品需要增加依赖关系时,可以考虑使用工厂模式,可以大大降低对象之间的耦合度。 3.当需要系统有比较好的扩展性时,可以考虑工厂模式,不同的产品用不同的实现工厂来组装。 下面展示一些 内联代码片 。
简单工厂模式: 缺点:当我们需要增加一种计算时,例如开平方。这个时候我们需要先定义一个类继承 Operation 类,其中实现平方的代码。除此之外我们还要修改 OperationFactory 类的代码,增加一个 case。这显然是违背开闭原则的。可想而知对于新产品的加入,工厂类是很被动的。
@Setter
@Getter
public abstract class Operation {
private double value1 = 0;
private double value2 = 0;
protected abstract double getResule();
}
public class OperationAdd extends Operation {
@Override
protected double getResule() {
return getValue1() + getValue2();
}
}
public class OperationSub extends Operation {
@Override
protected double getResule() {
return getValue1() - getValue2();
}
}
public class OperationMul extends Operation {
@Override
protected double getResule() {
return getValue1() * getValue2();
}
}
public class OperationDiv extends Operation {
@Override
protected double getResule() {
if (getValue2() != 0) {
return getValue1() / getValue2();
}
throw new IllegalArgumentException("除数不能为零");
}
}
工厂方法模式: 下面展示一些 内联代码片 。
public interface IFactory {
Operation CreateOption();
}
public class AddFactory implements IFactory {
public Operation CreateOption() {
return new OperationAdd();
}
}
public class SubFactory implements IFactory {
public Operation CreateOption() {
return new OperationSub();
}
}
public class MulFactory implements IFactory {
public Operation CreateOption() {
return new OperationMul();
}
}
public class DivFactory implements IFactory {
public Operation CreateOption() {
return new OperationDiv();
}
}
适用场景: 1.一个类不知道它所需要的对象的类 2.一个类通过其子类来指定创建哪个对象
|