美文网首页设计模式-java
设计模式之简单工厂(创建型)---1

设计模式之简单工厂(创建型)---1

作者: auzqy | 来源:发表于2019-07-19 20:47 被阅读0次

导语

简单工厂又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。如果从设计模式分类的角度应该分在创建型。

定义

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。

优缺点

优点

只需要传入一个正确的参数,就可以获取所需要的对象,而无需知道创建细节。

缺点

工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,违背了开闭原则。

代码示例

example1

使用简单工厂模拟生产奔驰车和宝马车的例子
代码详见 访问链接

UML类图

image.png
/**
 * @Description: 具体的将要生产的 奔驰汽车
 */
public class BenzCar extends Car {
    @Override
    public void produce() {
        System.out.println("一辆 【奔驰】 汽车生产出来了!");
    }
}

/**
 * @Description: 具体的将要生产的 宝马汽车
 */
public class BMWCar extends Car {
    @Override
    public void produce() {
        System.out.println("一辆 【宝马】 汽车生产出来了!");
    }
}

/**
 * @Description: 使用简单工厂设计模式
 */
public class CarFactory {

    /**
     * @Description: 这种方式如果扩展的话,需要增加新的 if/else 的判断
     *              违反了开闭原则
     *
     *              相对对应的解决违反开闭原则的方式可以使用反射,
     *                      如: produceByReflection()
     */
    public Car produce(String carType){
        if("benz".equalsIgnoreCase(carType)){
            System.out.println("一辆 【奔驰】 汽车生产出来了!");
            return new BenzCar();
        } else if ("bmw".equalsIgnoreCase(carType)) {
            System.out.println("一辆 【宝马】 汽车生产出来了!");
            return new BMWCar();
        } else {
            System.out.println("所传车辆类型工厂当前无法建造!");
            return null;
        }
    }

    /**
     * @Description: 通过反射创建对象,一定程度上遵守了开闭原则
     *                          todo 这种通过Class当作如参的方式有待细究
     */
    public static Car produceByReflection(Class calzz){
        try {
            Car car = (Car)Class.forName(calzz.getName()).newInstance();
            return car;
        } catch (InstantiationException e) {
            System.out.println("发生异常," + e);
        } catch (IllegalAccessException e) {
            System.out.println("发生异常," + e);
        } catch (ClassNotFoundException e) {
            System.out.println("发生异常," + e);
        }
        return null;
    }
}

/**
* @Description: 测试类
*/
public class Test {
    public static void main(String[] args) {
        testUseSimpleFactoryAfter();
//        testUseSimpleFactoryAfterByReflection();
    }

    /**
     * @Description: 使用 简单工厂后的调用方法演示
     */
    public static void testUseSimpleFactoryAfter(){
        CarFactory carFactory = new CarFactory();
        carFactory.produce("benz");
        carFactory.produce("bmw");
    }

    /**
     * @Description: 使用 简单工厂后,通过反射创建新的对象
     */
    public static void testUseSimpleFactoryAfterByReflection(){
        Car benzCar = CarFactory.produceByReflection(BenzCar.class);
        benzCar.produce();

        Car bmwCar = CarFactory.produceByReflection(BMWCar.class);
        bmwCar.produce();
    }
}

example2

简易计算器的例子
代码详见 访问链接

UML图

UML类图图示样例

大话设计模式 正文P12

接口示例解释

大话设计模式 正文P13

应用场景

spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。

活字印刷术的例子,对可维护,可复用,可扩展,灵活性感觉诠释的很好

大话设计模式 正文P5

相关设计模式 todo

参考

  1. https://coding.imooc.com/learn/list/270.html(强烈推荐)
  2. https://en.wikipedia.org/wiki/Design_Patterns
  3. 大话设计模式,电子版下载链接,https://pan.baidu.com/s/17WOI3Bvp-JUoQXvaomHISg 密码:vw05
    (作者博客,https://www.cnblogs.com/cj723/archive/2007/12/30/1021314.html)
  4. https://www.cnblogs.com/geek6/p/3951677.html

相关文章

  • 简单工厂模式

    Android进阶之设计模式 简单工厂模式 简单工厂模式(又叫作静态工厂方法模式), 其属于创建型设计模式,但并不...

  • java设计模式-工厂模式之简单工厂

    工厂模式属于创建型设计模式(用于创建对象),今天这里要讲的就是工厂三兄弟之简单工厂。工厂三兄弟:(简单工厂,工厂,...

  • iOS开发集锦之 2017.03.21(设计模式)

    1. 《创建型设计模式》之iOS系统框架实践 作者: 轻墨描述:简单工厂模式(Factory Method); 工...

  • 重温设计模式

    设计模式 创建型设计模式:1.简单工厂模式(Simple Factory Pattern):专门定义一个类(工厂类...

  • 设计模式[2]-工厂方法模式-Factory Method Pa

    1. 工厂方法模式简介 工厂方法模式(Factory Method Pattern)是创建型的设计模式,和简单工厂...

  • 设计模式之工厂模式

    设计模式之工厂模式 1. 简单工厂模式 1.1 模式定义 简单工厂模式又称为静态工厂方法,它属于创建型模式。在简单...

  • 设计模式的基本概念与区别

    1、设计模式有哪些? 23种设计模式总体分为三大类创建型设计模式,共5种简单工厂、工厂方法模式,抽象工厂模式,单例...

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • android常用设计模式

    26种设计模式 创建型设计模式[5] 单例模式,工厂模式,抽象工厂模式,建造模式,原型模式,[简单工厂模式] 结构...

  • 1.1 creational 创建型 - simple Fact

    Simple Factory 简单工厂 [TOC] 创建型设计模式,又名 Static Factory 静态工厂...

网友评论

    本文标题:设计模式之简单工厂(创建型)---1

    本文链接:https://www.haomeiwen.com/subject/sxvklctx.html