设计模式笔记之简单工厂模式

前言

本系列设计模式的整理总结来自于《大话设计模式》的学习笔记,由于它采用的是C#语言,本人将它用Java语言来实现,进而更好的让新手们进行学习。

简单工厂模式

一、介绍

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

1、角色:

工厂角色(Creator):这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需要的产品对象。
抽象(Product)产品角色:简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。
具体产品(Concrete Product)角色:简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。

2、解决问题:如何去实例化一个合适的对象
3、思路:使用一个工厂类根据不同的需求来专门负责创建具体产品

二、实现

实例:做一个加法计算器,这个我想很多人都觉得很简单,写个加法类或者方法就行。但是这样的做法却需要用户去创建实例或者调用方法。现在流行懒人经济,人们都不喜欢做麻烦的事情。所以,我们需要一个工厂来帮用户实例化不同的运算类。这样用户只需要输入“+-x/”就可以计算了。以后如果要添加功能,就可以在工厂类中添加判断条件以及添加一个功能类。用户尽管用就好了。

1、运算类接口

public interface Operation {
     public double getResult(double numberA, double numberB);
}

2、各种产品功能类类实现运算类接口

/**
* 加法
* @author Administrator
*
*/
class OperationAdd implements Operation {
     public double getResult(double numberA, double numberB) {
          double result = 0;
          result = numberA + numberB;
          return result;
     }
}
/**
* 减法
* @author Administrator
*
*/
class OperationSub implements Operation {
     public double getResult(double numberA, double numberB) {
          double result = 0;
          result = numberA - numberB;
          return result;
     }
}
/**
* 乘法
* @author Administrator
*
*/
class OperationMul implements Operation {
     public double getResult(double numberA, double numberB) {
          double result = 0;
          result = numberA * numberB;
          return result;
     }
}
/**
* 除法
* @author Administrator
*
*/
class OperationDiv implements Operation {
     public double getResult(double numberA, double numberB) {
          double result = 0;
          if (numberB == 0){
              throw new RuntimeException("除数不能为0。");
          }
          result = numberA / numberB;
          return result;
     }
}

运算工厂类

public class OperationFactory
{
    public Operation createOperate(String operate)
    {
        Operation oper = null;
        switch (operate)
        {
            case "+":
                {
                    oper = new OperationAdd();
                    break;
                }
            case "-":
                {
                    oper = new OperationSub();
                    break;
                }
            case "*":
                {
                    oper = new OperationMul();
                    break;
                }
            case "/":
                {
                    oper = new OperationDiv();
                    break;
                }

        }
        return oper;
    }
}

测试类

public class test {
     public static void main(String[] args) {
          while(true) {
              OperationFactory of=new OperationFactory();
              Operation oper=of.createOperate("+");
              System.out.println(oper.getResult(1, 2));//计算1+2
          }

     }
}

源码下载
码云:http://git.oschina.net/WuJiaJing/XiaoJingZiDeSheJiMoShiBiJiYuanMa/tree/master/

你可能感兴趣的:(设计模式)