23种设计模式(一)---简单工厂设计模式

简介: 23种设计模式(一)---简单工厂设计模式

简单工厂设计模式---透彻讲解


一. 什么是工厂



理解简单工厂设计模式, 首先要理解什么是工厂. 我们身边有很多工厂. 酿酒的酒厂, 制衣的衣厂, 加工肉类的肉加工厂等等. 这些工厂他们到底是怎么酿酒的? 怎么制衣的?怎么加工肉的? 我们并不知道, 也不需要知道. 不知道并不影响我们喝酒, 穿衣, 吃肉. 这就是工厂的特点之一: 客户不需要知道怎么做的, 但是不影响使用


再来看看工厂的第二个特点: 比如肉加工厂---双汇. 牛肉进去出来牛肉火腿肠, 羊肉进去出来羊肉火腿肠, 猪肉进去出来猪肉火腿肠. 我不需要知道怎么加工的, 我只需要把材料扔进去, 然后对应的火腿肠就出来了. 这就是第二个特点: 给你材料, 你去制造出我想要的东西, 至于怎么做, 我并不关心.


程序中的工厂也是一样的思想. **工厂的作用就是创造对象. **


二. 简单工厂设计模式



2.1. 设计模式


我们基本都知道设计模式有23种, 说到这, 我们先来说说设计模式。

设计模式不是语法, 而是一种巧妙的写法, 能够把程序变得更加灵活的写法.

设计模式有三种: 创建型, 行为型, 结构型. 简单工厂设计模式属于创建型. 但简单工厂设计模式不属于23种设计模式范围内, 属于23种设计模式中工厂设计模式里最简单的一种.


2.2. 简单工厂设计模式


简单工厂设计模式, 又叫做静态工厂设计模式. 简单工厂设计模式提供一个创建对象实例的功能,而无需关系其具体实现,被创建实例的类型可以是接口、抽象类,也可以是具体的类。


2.3. 简单工厂设计模式的4要素


这个很重要, 这也是创建一个简单工厂的步骤

  1. API接口: 创建一个API接口或抽象类
  2. Impl实现类: 一个或多个实现API接口/抽象类的类
  3. 工厂: 定义一个工厂, 用来创建API接口类对象
  4. 客户端: 用来调用工厂创建API接口或抽象类的客户端


2.4 简单工厂结构类型及说明

fc15664c8b884bbaa1e6c5db469d3bd7_tplv-k3u1fbpfcp-zoom-1.png


以上类型就描述了一个简单工厂创建的整个过程


第一步: 定义API接口或抽象类, 并定义一个operate操作方法


第二步: 定义API的实现类, 每个实现类单独实现operate方法


第三步: 定义工厂类. 工厂类依赖API接口和API的实现类, 简单工厂设计模式是创建型的, 通常是用来创建实体类. 因此我们定义一个create方法, 来创建实例对象,入参通常是一个指定的类型


第四步: 定义客户端. 客户端传入一个指定的类型给工厂, 工厂就会创建出对应的实现类.

2.5 简单工厂模板代码

第一步: 制衣厂API接口

package com.lxl.www.designPatterns.simpleFactory.demo;
public interface IClothes {
    void operate();
}

第二步: 制衣厂API实现类

ManClothes: 制作男士衣服

package com.lxl.www.designPatterns.simpleFactory.demo;
public class ManClothes implements IClothes{
    @Override
    public void operate() {
        System.out.println("制作男人的衣服");
    }
}

WomenClothes: 制作女士衣服

package com.lxl.www.designPatterns.simpleFactory.demo;
public class WomenClothes implements IClothes{
    @Override
    public void operate() {
        System.out.println("制作女人的衣服");
    }
}

ChildClothes: 制作儿童衣服

package com.lxl.www.designPatterns.simpleFactory.demo;
public class ChildClothes implements IClothes{
    @Override
    public void operate() {
        System.out.println("制作儿童的衣服");
    }
}

第三步: 定义工厂, 并创建衣服类接口

package com.lxl.www.designPatterns.simpleFactory.demo;
/**
 * 制衣工厂
 */
public class ClothesFactory {
    public static IClothes createClothes(String type) {
        if (type.equals("男人")) {
            return new ManClothes();
        } else if (type .equals("女人")) {
            return new WomenClothes();
        } else {
            return new ChildClothes();
        }
    }
}

第四步: 定义客户端, 指定制衣类别, 制衣.

public static void main(String[] args) {
        IClothes manClothes = ClothesFactory.createClothes("男人");
        manClothes.operate();
    }

2.6 简单工厂命名建议


  • 类命名建议为“模块名称+Factory”,比如,用户模块的工厂就称为UserFactory, 制衣工厂: ClothesFactory
  • 方法名称通常为“get+接口名称”或者是“create+接口名称”。比如制衣接口名称为IClothes,那么方法名称通常为getClothes或者createClothes。

提供一个创建对象实例的功能,而无需关心其具体实现,被创建实例的类型可以是接口、抽象类,也可以是具体的类。


2.7 总结


简单工厂方法的内部主要实现的功能是 ** “选择合适的实现类” **,选择条件或者是参数的来源通常为以下几种:


  1. 来源于客户端,由Client来传入参数
  2. 来源于配置文件,从配置文件获取用于判断的值
  3. 来源于程序运行期的某个值,比如从缓存中获取某个运行期的值


三. 简单工厂的优缺点


优点:


  1. 帮助封装: 简单工厂虽然简单,但是非常友好地帮助我们实现了组件的封装,然后让组件外部能真正面向接口编程。
  2. 解耦: 通过简单工厂,实现了客户端和具体实现类的解耦。
  3. 把初始化实例时的工作放到工厂里进行,使代码更容易维护。 更符合面向对象的原则 & 面向接口编程,而不是面向实现编程。


缺点:


1.可能增加客户端的复杂度


2.不方便扩展子工厂


3. 工厂类集中了所有实例(产品)的创建逻辑,一旦这个工厂不能正常工作,整个系统都会受到影响;


4. 违背“开放 - 关闭原则”,一旦添加新产品就不得不修改工厂类的逻辑,这样就会造成工厂逻辑过于复杂。


5. 简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构。


四. 使用场景



  • 如果想完全封装隔离具体实现,让外部只能通过接口来操作封装体,那么可以选择简单工厂,让客户端通过工厂来获取相应的接口,而无须关心具体的实现。
  • 如果想要把对外创建对象的职责集中管理和控制,可以选择简单工厂。
  • 当工厂类负责创建的对象(具体产品)比较少时。
相关文章
|
6月前
|
设计模式 Java 数据库
小谈设计模式(2)—简单工厂模式
小谈设计模式(2)—简单工厂模式
|
6月前
|
设计模式 Java PHP
php设计模式--简单工厂模式(一)
php设计模式--简单工厂模式(一)
36 0
|
2月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
6月前
|
设计模式
设计模式-简单工厂和工厂方法
设计模式-简单工厂和工厂方法
|
3月前
|
设计模式 XML Java
【一】设计模式~~~创建型模式~~~简单工厂模式(Java)
文章详细介绍了简单工厂模式(Simple Factory Pattern),这是一种创建型设计模式,用于根据输入参数的不同返回不同类的实例,而客户端不需要知道具体类名。文章通过图表类的实例,展示了简单工厂模式的结构、时序图、代码实现、优缺点以及适用环境,并提供了Java代码示例和扩展应用,如通过配置文件读取参数来实现对象的创建。
【一】设计模式~~~创建型模式~~~简单工厂模式(Java)
|
3月前
|
设计模式 uml C语言
设计模式----------工厂模式之简单工厂模式(创建型)
这篇文章详细介绍了简单工厂模式,包括其定义、应用场景、UML类图、通用代码实现、运行结果、实际应用例子,以及如何通过反射机制实现对象创建,从而提高代码的扩展性和维护性。
设计模式----------工厂模式之简单工厂模式(创建型)
|
3月前
|
设计模式 测试技术 Go
[设计模式]创建型模式-简单工厂模式
[设计模式]创建型模式-简单工厂模式
|
5月前
|
设计模式 Java
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
|
5月前
|
设计模式 Java 编译器
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
|
5月前
|
设计模式 XML Java
【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】
三 结尾 如果文章中有什么不足,欢迎大家留言交流,感谢朋友们的支持! 如果能帮到你的话,那就来关注我吧!如果您更喜欢微信文章的阅读方式,可以关注我的公众号
55 5