读大话设计模式之简单工厂模式

原创 2018年04月17日 15:55:08

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

感觉模式挺简单的直接上代码:
首先是工厂类,我在此用反射获取的运算类父类,主要是为了消除if-else,我是想不到其他方法消除,有其他方法欢迎大家留言:

/**
 * 运算工厂
 * 
 * @author
 * @since 谷泽昊 2018年4月17日
 */
public class OperationFactory {

    /**
     * 初始化
     */
    private static final Map<String, String> map = new HashMap<String, String>() {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;

        {
            put("+", "com.gzh.OperationAdd");
            put("-", "com.gzh.OperationSub");
            put("*", "com.gzh.OperationMul");
            put("/", "com.gzh.OperationDiv");
        }
    };

    /**
     * 简单工厂模式,通过反射获取父类
     * @author 
     * @since 谷泽昊 2018年4月17日
     * @param operation
     * @return
     * @throws InstantiationException
     * @throws IllegalAccessException
     * @throws ClassNotFoundException
     */
    public static Operation createOperation(String operation) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
        String oper = map.get(operation);
        if(oper!=null){
            return (Operation) Class.forName(oper).newInstance();
        }
        return null;
    }
}

然后是加法类:

/**
 * 加法运算
 * @author 
 * @since 谷泽昊 2018年4月17日
 */
public class OperationAdd extends Operation{

    @Override
    public double getResult(double numberA, double numberB) throws ArithmeticException {
        return numberA+numberB;
    }

}

减法类:

/**
 * 减法运算
 * 
 * @author
 * @since 谷泽昊 2018年4月17日
 */
public class OperationSub extends Operation {

    @Override
    public double getResult(double numberA, double numberB) throws ArithmeticException {
        return numberA-numberB;
    }

}

乘法类:

/**
 * 乘法运算
 * @author 
 * @since 谷泽昊 2018年4月17日
 */
public class OperationMul extends Operation{

    @Override
    public double getResult(double numberA, double numberB) throws ArithmeticException {
        return numberA*numberB;
    }

}

除法类:

/**
 * 减法运算
 * 
 * @author
 * @since 谷泽昊 2018年4月17日
 */
public class OperationSub extends Operation {

    @Override
    public double getResult(double numberA, double numberB) throws ArithmeticException {
        return numberA-numberB;
    }

}

最后是main方法:

public class App {

    public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
        Operation operationAdd = OperationFactory.createOperation("+");
        try {
            System.out.println(operationAdd.getResult(1, 2));
        } catch (Exception e) {
            e.printStackTrace();
        }
        Operation operationSub = OperationFactory.createOperation("-");

        try {
            System.out.println(operationSub.getResult(1, 2));
        } catch (Exception e) {
            e.printStackTrace();
        }
        Operation operationMul = OperationFactory.createOperation("*");

        try {
            System.out.println(operationMul.getResult(1, 2));
        } catch (Exception e) {
            e.printStackTrace();
        }
        Operation operationDiv = OperationFactory.createOperation("/");

        try {
            System.out.println(operationDiv.getResult(1, 0));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

这就是简单工厂模式。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29972443/article/details/79976093

C++不足之处讨论系列(四)--函数重载

以下文章翻译自Ian Joyner所著的《C++?? A Critique of C++ and Programming and Language Trends of the 1990s》 3/E【I...
  • cber
  • cber
  • 2001-05-21 23:26:00
  • 1228

《大话设计模式》之简单的工厂模式

面向对象 面向对象:可维护、可复用、可扩展、灵活性好 降低程序的耦合度:封装、继承、多态 设计模式:使程序更加灵活,容易修改,并且易于复用 业务的封装:将业务逻辑和界面逻辑分开,降低它们的耦合...
  • yangquanhui1991
  • yangquanhui1991
  • 2015-12-23 22:27:42
  • 268

《大话设计模式》java实现之简单工厂模式

《大话模式》这本书写得不错,可惜不是java版,现在有空,想着用java实现一下,写到哪算哪 UML图 代码结构图 public class Client { public stat...
  • linlinxie
  • linlinxie
  • 2017-11-10 18:52:25
  • 123

大话设计模式—工厂模式

一、简介工厂模式主要是为创建对象提供了接口。工厂模式按照《Java与模式》中的提法分为三类: 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模...
  • lmb55
  • lmb55
  • 2015-05-31 14:42:07
  • 1300

大话设计模式之一简单工厂模式

这是我所敲的第一个设计模式,一个严格来说不能算作设计模式的模式,一个让我这个菜鸟头疼了两天的模式~对于刚才VB6.0转战过来的、从前认为代码简单即是优的我来说,理解这个过程真的很痛苦呢~     在...
  • wlccomeon
  • wlccomeon
  • 2013-02-19 16:57:34
  • 2036

大话设计模式之简单工厂模式、抽象工厂模式及工厂方法模式的比较

简单工厂模式、抽象工厂模式、工厂方法模式,这三种工厂模式都属于设计模式中的创建型模式,它们在形式和特点上也多少有些相似,其最终目的都是帮我们将对象的实例化部分取出来,进而优化系统架构,增强系统的扩展性...
  • HH1778981113
  • HH1778981113
  • 2016-10-29 23:24:19
  • 105

大话设计模式C++实现-第1章-简单工厂模式

一、UML图 二、包含的角色 简单工厂模式包含三个角色:(1)工厂类Factory(2)抽象产品类AbstractProduct(3)具体产品类ConcreteProduct。 (1)Factor...
  • XD_lixin
  • XD_lixin
  • 2014-11-09 15:09:13
  • 2986

大话设计模式1 简单工厂模式 的java代码实现

首先是Operation抽象类: package yx.designpattern.simpleFactory; abstract class Operation { public double...
  • yixiang1989
  • yixiang1989
  • 2014-08-08 19:39:50
  • 600

01 简单工厂模式 设计模式

  • 2010年12月07日 21:47
  • 141KB
  • 下载

【设计模式】简单工厂模式——以一个简单的计算器为例

本文内容参考自《大话设计模式》(程杰 著) 1.拙劣的代码class Program{ static void Main(string[] args) { Console.W...
  • jiange_zh
  • jiange_zh
  • 2015-12-04 13:51:04
  • 3415
收藏助手
不良信息举报
您举报文章:读大话设计模式之简单工厂模式
举报原因:
原因补充:

(最多只允许输入30个字)