工厂模式三部曲之简单工厂模式

今天,我们来谈一谈工厂模式三部曲之一——简单工厂模式(静态工厂模式)。
首先,先谈一下工厂模式吧,工厂模式根据抽象程度的不同划分为三种:简单工厂模式,工厂方法模式以及抽象工厂模式。它是编程中经常用到的一种模式哦。那么为什么这么受欢迎呢?
1.可以使代码清晰,有效地封装变化。通过工厂模式将产品的实例化封装起来,调用者无需关心产品的实例化过程,只需要依赖工厂即可得到自己想要的产品。
2.降低耦合度。产品类的实例化通常需要依赖很多的类,而这些类对于调用者来说根本无需知道,使用了工厂方法,我们需要做的仅仅是实例化好产品类,然后交给调用者使用。对于调用者来说,产品所依赖的类都是透明的。

3.对调用者屏蔽具体的产品类。调用者只关心产品的接口就可以了,至于具体的实现,调用者根本无需关心。即使变更了具体的实现,对调用者来说没有任何的影响。

简单工厂模式,一般具有三个要素,工厂类,产品接口和产品的实现。
下面以简单的计算器案例加以说明。

类图如下:

项目目录如下:

三个要素,工厂类是OperationFactory,负责创建产品对象。产品接口是Operation,里面定义了getResult()方法。AddOperation,SubOperation,MulOperation,DivOperation分别是产品的具体实现。代码如下:

Operation:

public abstract class Operation {
    private double number1;
    private double number2;
    public double getNumber1() {
        return number1;
    }
    public void setNumber1(double number1) {
        this.number1 = number1;
    }
    public double getNumber2() {
        return number2;
    }
    public void setNumber2(double number2) {
        this.number2 = number2;
    }
    public abstract double getResult();
}

AddOperation:

public class AddOperation extends Operation {

    @Override
    public double getResult() {
        return getNumber1() + getNumber2();
    }

}

SubOperation:

public class SubOperation extends Operation {

    @Override
    public double getResult() {
        return getNumber1() - getNumber2();
    }

}

MulOperation:

public class MulOperation extends Operation {

    @Override
    public double getResult() {
        return getNumber1() * getNumber2();
    }

}

DivOperation:

public class DivOperation extends Operation {

    @Override
    public double getResult() {
        if("0".equals(getNumber2()+"")){
            throw new RuntimeException("除数不能为0");
        }
        return getNumber1() / getNumber2();
    }

}

OpertionFactory:

public class OperationFactory {
    public static Operation createOperation(String op){
        Operation oper = null;
        switch (op) {
        case "+":
            oper = new AddOperation();
            break;
        case "-":
            oper = new SubOperation();
            break;
        case "*":
            oper = new MulOperation();
            break;
        case "/":
            oper = new DivOperation();
            break;

        default:
            oper = null;
        }
        return oper;
    }
}

测试:

Operation oper = OperationFactory.createOperation("-");
oper.setNumber1(1);
oper.setNumber2(3.5);
System.out.println(oper.getResult());
时间: 2024-10-13 15:54:47

工厂模式三部曲之简单工厂模式的相关文章

工厂模式三部曲:抽象工厂模式

工厂模式三部曲:简单工厂模式 工厂模式三部曲:工厂方法模式 前言 这是工厂模式三部曲中的最后一篇了,在这篇文章中将会讲述抽象工厂模式,抽象工厂模式正如其名字一样,非常抽象.但是抽象工厂模式的功能却十分强大,对抽象工厂的利用也非常好. 这篇文章中会像本系列第一篇一样,给出普通实现方式和使用了反射机制的实现两种代码,并且会说明这两种实现方式的区别.并且在文章的最后,会将这三种模式放在一起,对这三种工厂模式进行总结. 本人理解可能不够深刻,这一系列文章中存在的问题,欢迎大家提出,谢谢! 什么是抽象工厂

工厂模式总结(简单工厂,工厂方法,抽象工厂)

工厂模式属于创建型模式,大致可以分为三类,简单工厂模式.工厂方法模式.抽象工厂模式. 通过两个例子讲解这三种工厂模式 示例一 简单工厂模式 首先介绍简单工厂模式,它的主要特点是需要在工厂类中做判断,从而创造相应的产品.当增加新的产品时,就需要修改工厂类.有点抽象,举个例子就明白了.有一家生产处理器核的厂家,它只有一个工厂,能够生产两种型号的处理器核.客户需要什么样的处理器核,一定要显示地告诉生产工厂.下面给出一种实现方案. 1 enum CTYPE {COREA, COREB}; 2 class

《JAVA与模式》之简单工厂模式 (转)

在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 那么简单工厂模式是在什么场景下使用呢,下面就以本人的理解举例说明: 就拿登录功能来说,假如应用系统需要支持多种登录方式如:口令认证.域认证(口令认证通常是去数据库中验证用户,而域认证则是需要到微软的域中验证用户).那么自然的做法就是建立一个各种登录方式都适用的接口,如下图所

《JAVA与模式》之简单工厂模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 那么简单工厂模式是在什么场景下使用呢,下面就以本人的理解举例说明: 就拿登录功能来说,假如应用系统需要支持多种登录方式如:口令认证.域认证(口令认证通常是去数据库中验证用户,而域认证则是需要到微软的域中验证用户).那么自然的做法就是建立一个各种登录方式都适用的接口,如下图所

《JAVA与模式》之简单工厂与工厂方法

一.简单工厂 1.1 使用场景 1.工厂类负责创建的对象比较少: 2.客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心: 3.由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用. 1.2 优缺点 优点: 工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了.而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利

设计模式之创建型模式—— 1.1 简单工厂模式

<?php                  /** * 1.1 简单工厂模式 * * 解决的问题: *  如何解决多个类实例化对象的问题. *  注意:因为是简单工厂模式,所以要实例 *    化的类不能太多,否则请使用1.2节 *    的工厂方法模式. * * 解决方案: *  建立一个工厂(即一个工厂类),通过参数的 *  传递动态决定应该创建哪一个产品类(这些 *  产品类继承自一个父类或接口)的实例. *  *  * 该模式中包含三种角色: *  注:这里的角色指的就是类! *  1

工厂模式一之简单工厂

工厂用来生产商品,然后卖给供应商,再由供应商转手给门店,再卖给顾客 .这样的一种生产到供应的过程,看看如何应用到我们的程序中. 1.下面以衣服店为例子. 第一步 clothes.js //创建一个衣服店模型. var ClothesShop = function (){} ClothesShop.prototype = { sellClothes: function (color){ var clothesType = ['Red', 'Blue', 'Yello', 'Green', 'Gra

创建型模式1.2简单工厂模式

一.概念 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一. 二.类图 三.具体介绍 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 该模式中包含的角色及其职责 工厂(OpertionFactory)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂

浅析设计模式(四)——创建型模式之simple-factory(简单工厂方法,非设计模式)

简单工厂方法simple-factory 注:部分内容参考自<Head First设计模式>和GoF<设计模式:可复用面向对象软件的基础> 首先需要说明的是:简单工厂方法不是一种设计模式,它更像是一种编程习惯. 定义:简单工厂方法把变化的部分(即创建对象的细节)封装起来,即通过工厂类(Factory)来处理创建对象的细节. 这种处理方式把创建对象的细节进行了简单的封装,单独进行管理,使之解耦,便于维护. 例如:要创建不同类型的Pizza,我们不在PizzaStore的方法中直接根据