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

来源:互联网 发布:西岐网络我有上将 编辑:程序博客网 时间:2024/06/08 18:11

——- 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
原创粉丝点击