工厂方法模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延伸到其子类。
对于简单工厂模式来说,其优点是工厂类包含了必要的逻辑判断,但是在新增操作类时,不仅仅增加了类还要修改工厂类的判断处语句(switch)。所以说简单工厂不仅对扩展开放,还对修改开放了,这样就违背了开放-封闭原则。
而工厂方法模式则将原先的工厂类进行抽象,让这个抽象工厂类的子类来决定实例化哪个操作类。这样,在增加一个功能类时,只需要再增加一个抽象工厂的子类即可,这就保证了开放-封闭原则。
当然,注意一下就会发现这样会让判断交由客户端处理,这是不合适的,这个之后可以使用Java中的反射机制来解决。
所需的类:
- IFactory 抽象工厂类
- AddFactory/SubFactory 具体的工厂类,继承自IFactory
- Operation 操作的抽象类
- AddOperation/SubOperation 具体的操作类
代码实现:
IFactory (抽象工厂类)
public interface IFactory {
public abstract Operation createOperation();
}
AddOperationFactory
public class AddOperationFactory implements IFactory{
@Override
public Operation createOperation() {
// TODO Auto-generated method stub
return new AddOperation();
}
}
SubOperationFactory
public class SubOperationFactory implements IFactory{
@Override
public Operation createOperation() {
// TODO Auto-generated method stub
return new SubOperation();
}
}
Operation
public abstract class Operation {
public double num_a,num_b;
public abstract double getResult();
}
Application(应用类)
public class Application {
public static void main(String args[]){
IFactory factory = new SubOperationFactory();
Operation ope = factory.createOperation();
ope.num_a = 3;
ope.num_b = 2;
System.out.println(ope.getResult());
}
}