——- android培训、java培训、期待与您交流! ———-
在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。我们可以建立一个工厂来创建对象。工厂模式有三种类型,1简单工厂模式,2工厂方法模式,3抽象工厂模式。一个简单工厂模式的例子:
class OperationFactory {
public static Operation createOperation(String operate) {
Operation oper;
switch (operate) {
case "+":
oper = new OperationAdd();
case "-":
oper = new OperationSub();
case "*":
oper = new OperationMul();
case "/":
oper = new OperationDiv();
break;
}
return oper;
}
}
客户端的应用
Operation oper;
oper= OperationFacory.createOperate("+");
oper.NumberA=1;
oper.NumberB=2;
double result=oper.GetResult();
工厂方法模式的实现:
先建立一个工厂接口
public interface IFactory {
Operation CreateOperation();
}
然后每个运算方式各建一个具体工厂去实现这个接口:
public class AddFactory implements IFactory{
public Operation CreateOperation(){
return new OperationAdd();
}
}
public class SubFactory implements IFactory{
public Operation CreateOperation(){
return new OperationSub();
}
}
public class MulFactory implements IFactory{
public Operation CreateOperation(){
return new OperationMul();
}
}
public class DivFactory implements IFactory{
public Operation CreateOperation(){
return new OperationDiv();
}
}
客户端这样实现:
IFactory operFactory=new AddFactory();
oper= OperationFacory.createOperate("+");
oper.NumberA=1;
oper.NumberB=2;
double result=oper.GetResult();
简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户选择的条件动态化实例相关的类,对于客户端来说,去除了与具体产品的依赖。工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类中。工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现类,选择判断的问题还是存在的,也就是说工厂方法吧简单的工厂内部逻辑判断移到了客户端来进行,你想要加功能,本来是改工厂类的,而现在是修改客户端。
而抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。它针对的是有多个产品的等级结构。而工厂方法模式针对的是一个产品的等级结构。