黑马程序员-设计模式-工厂模式

——- 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),定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类中。工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现类,选择判断的问题还是存在的,也就是说工厂方法吧简单的工厂内部逻辑判断移到了客户端来进行,你想要加功能,本来是改工厂类的,而现在是修改客户端。
而抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。它针对的是有多个产品的等级结构。而工厂方法模式针对的是一个产品的等级结构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值