SimpleFactory

工厂模式的几种形态:

  1. 简单工厂(Simple Factory)模式:又称静态工厂方法模式(Static Factory Method Pattern)
  2. 工厂方法(Factory Method)模式:又称多态性工厂(Polymorphic)模式或虚拟构造子(Virtual Constructor)模式。
  3. 抽象工厂(Abstract Factory)模式,又称工具箱(Toolkit)模式。


工厂模式优点 :把具体使用 new 操作符的细节包装和隐蔽起来。


简单工厂简略图

SimpleFactory

  • 工厂类:简单工厂的核心,含有对应用紧密相关的逻辑。在客户端的直接调用下创建产品对象。
  • 抽象产品:简单工厂模式所创建的对象的父类。
  • 具体产品:所创建的具体实例。

 

简单工厂模式优点

  • 模式的核心是工厂类,这个类有必要的判断逻辑,决定什么时候创建哪一个产品类的实例。

简单工厂模式缺点

  • 当产品类有复杂的多层次等级结构时,工厂类只有一个,则需要把太多的逻辑集中在一个工厂类中。但产品类有不同的接口种类时,工厂类需要判断在什么时候创建某种产品。这种对时机的判断和对哪一种具体产品的判断逻辑混合在一起,使得系统在将来进行功能扩展是较为困难的。这一缺点在工厂方法模式得到克服。
  • 由于简单工厂模式使用静态方法作为工厂方法,而静态方法无法由子类继承,因此工厂角色无法形成基于继承的等级结构。这一缺点在工厂方法模式得到克服。
  • 对于“开-闭”原则支持不够。(增加新的产品必将导致工厂类的修改)
 1 public abstract class Operation

 2 {

 3 

 4     private double a;

 5 

 6     private double b;

 7 

 8     public double getA()

 9     {

10         return a;

11     }

12 

13     public void setA(double a)

14     {

15         this.a = a;

16     }

17 

18     public double getB()

19     {

20         return b;

21     }

22 

23     public void setB(double b)

24     {

25         this.b = b;

26     }

27 

28     public abstract double getResult();

29 

30 }
1 public class OperationAdd extends Operation

2 {

3     @Override

4     public double getResult()

5     {

6         return getA() + getB();

7     }

8 }
 1 public class OperationDiv extends Operation

 2 {

 3     @Override

 4     public double getResult()

 5     {

 6         if (getB() != 0)

 7         {

 8             return getA() / getB();

 9         }

10         System.out.println(" b can not be zero ! ");

11         return 0;

12     }

13 }
 1 public class OperationFactory

 2 {

 3     public static Operation createOperationFactory(String expression)

 4     {

 5         Operation operation = null;

 6         if ("+".equals(expression))

 7         {

 8             operation = new OperationAdd();

 9         } else if ("/".equals(expression))

10         {

11             operation = new OperationDiv();

12         }

13         return operation;

14     }

15 }
1     public static void main(String[] args)

2     {

3         Operation operation = OperationFactory.createOperationFactory("/");

4         operation.setA(62);

5         operation.setB(2);

6         System.out.println(operation.getResult());

7     }


Advantage:

1、面向对象:封装、继承、多态。

2、使用OperationFactory.createOperationFactory(),让业务逻辑与界面逻辑分开,之间的耦合度降低。可达到容易维护与扩展。

3、把每一种的运算方法分离,修改其中一个而不影响另外几个,增加其它运算代码(如 减法、求开根号)也不影响其它类的代码,只需要添加多一种运算类extends Operation。若只让修改一种运算代码,那么不需要公开其它的运算代码。

4、如何让计算器知道我希望用哪一种算法呢? SimpleFactory只需要输入符号,工厂就能实例化合适的对象,通过多态返回父类的方式实现了计算器的结果。

 

SimpleFactory 

你可能感兴趣的:(factory)