首页 > 技术文章 > 设计模式学习笔记(二)--简单工厂模式和工厂模式

yiRain1992 2018-04-01 22:43 原文

老生长谈的两个设计模式了,这里把这两个设计模式对比着来总结一下。

  • 什么是简单工厂模式?
  1. 简单工厂模式:根据传入工厂类的参数动态决定要创建哪一个产品类的实例。
  2. UML图如下(以实现一个计算器为例):
  3. 简单工厂模式的Java代码实现如下:

  (1)首先创建一个抽象运算类Operation.java,里面有一个抽象方法GetResult(),留到子类去实现

 

 1 /**
 2  * 
 3  * 运算类
 4  *
 5  */
 6 abstract class Operation{
 7     public double numberA, numberB;
 8     public void setNumberA(double numberA){
 9         this.numberA = numberA;
10     }
11     public void setNumberB(double numberB){
12         this.numberB = numberB;
13     }
14     public abstract double GetResult();
15 }

 (2)创建加法类addOperation.java和减法类subOperation.java,继承运算类

 1 /**
 2  * 
 3  * 加法类
 4  *
 5  */
 6 class addOperation extends Operation{
 7 
 8     @Override
 9     public double GetResult() {
10         // TODO Auto-generated method stub
11         return super.numberA+super.numberB;
12     }
13     
14 }
15 
16 /**
17  * 
18  * 减法类
19  *
20  */
21 class subOperation extends Operation{
22 
23     @Override
24     public double GetResult() {
25         // TODO Auto-generated method stub
26         return super.numberA-super.numberB;
27     }
28     
29 }

 (3)创建工厂类FactoryOperation.java

 1 /**
 2  * 
 3  * 工厂类
 4  *
 5  */
 6 class FactoryOperation{
 7     public Operation CreateOperate(char type){
 8         switch (type) {
 9         case '+':
10             Operation add = new addOperation();
11             return add;
12         case '-':
13             Operation sub = new subOperation();
14             return sub;
15         default:
16             return null;
17         }
18     }
19 }

 (4)客户端代码如下

 1 public class SimpleFactory {
 2  
 3     public static void main(String[] args){
 4         
 5         double numberA = 6,numberB = 2;
 6         
 7         FactoryOperation factoryOperation = new FactoryOperation();
 8         Operation add = factoryOperation.CreateOperate('+');
 9         add.setNumberA(numberA);
10         add.setNumberB(numberB);
11         double addResult = add.GetResult();
12         
13         Operation sub = factoryOperation.CreateOperate('-');
14         sub.setNumberA(numberA);
15         sub.setNumberB(numberB);
16         double subResult = sub.GetResult();
17         
18         System.out.println("addResult="+addResult+",subResult="+subResult);
19     }
20 }

       现在我们思考一个问题:如果此时我想加入乘法呢?可以想到的是加入一个乘法类,同时还要修改工厂类,加入相应的判断逻辑。我们知道,软件设计中有一个原则:依赖-倒转原则(对扩展开放,对修改不开放),很显然,简单工厂模式不符合该原则。下面我们讲的工厂模式能否克服简单工厂的缺点呢?

 

  • 什么是工厂模式?
  1. 工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。
  2. UML图如下(以实现一个计算器为例)

推荐阅读