文章目录

  • 工厂模式
    • 1. 简单工厂
    • 2. 缓存方式
    • 3. 工厂模式
    • 4. 工厂的工厂
    • 5. 抽象工厂
    • 6. 工厂模式与IOC容器
  • 总结

设计模式是面向问题、场景而总结产生的设计思路。是解决问题的套路。23 种经典的设计模式。它们又可以分为三大类:创建型、结构型、行为型。

创建型 包含了 单例模式、工厂模式、建造者模式、原型模式。

工厂模式

对于一个类对象,如果构建比较复杂,我们可以将这部分复杂的部分抽取出来,由工厂类来解决这部分复杂的处理逻辑。

1. 简单工厂

用于解决复杂对象的构建。

public class CarObject {}public class Factory{public static CarObject getInstance(String obj) {return new CarObject();}
}

2. 缓存方式

可以将对象缓存起来,提升获取对象的效率和性能,屏蔽对象创建的复杂性。
其中Engine;Baseplate;GearBox;Tyre可以都继承于某个基类CarObject

public class CarObject {}
public class Engine  extends CarObject{}
public class Baseplate extends CarObject{}
public class GearBox  extends CarObject{}
public class Tyre  extends CarObject{}public class Factory{private static final Map<String,CarObject> cachedpool = new HashMap<>();static {cachedpool.put("发动机",new Engine());cachedpool.put("底盘",new Baseplate());cachedpool.put("变速箱",new GearBox());cachedpool.put("轮胎",new Tyre());}public static CarObject getInstance(String type) {return cachedpool.get(type);}
}

3. 工厂模式

使用多态设计,设计1个工厂接口,以及多个工厂类实现该接口。当需要什么部件时就使用对应的工厂类。

public interface Ifactory{CarObject getInstance();
}public class EngineFactory implements Ifactory {public CarObject getInstance(){return new Engine();}
}public class BaseplateFactory implements Ifactory {public CarObject getInstance(){return new Baseplate();}
}public class GearBoxFactory implements Ifactory {public CarObject getInstance(){return new GearBox();}
}public class TyreFactory implements Ifactory {public CarObject getInstance(){return new Tyre();}
}

4. 工厂的工厂

可以将工厂再次抽象为一个产品,还可以缓存起来,根据需要生成不同的工厂对象。

public class Factory{private static final Map<String, Ifactory> cachedpool = new HashMap<>();static {cachedpool.put("发动机",new EngineFactory());cachedpool.put("底盘",new BaseplateFactory());cachedpool.put("变速箱",new GearBoxFactory());cachedpool.put("轮胎",new TyreFactory());}public static Ifactory getFactory(String type) {return cachedpool.get(type);}
}

5. 抽象工厂

当需要生产的对象是产品族时,可以使用抽象工厂。抽象工厂类定义产品,具体的工厂类生产对应的型号产品。
比如飞机工厂和汽车工厂都生产这四个产品,那么调用飞机工厂时,返回的对象是飞机型号的。这样可以很方便的切换产品线。
首先定义产品类。

public class Baseplate {}class CarBaseplate extends Baseplate{}class PlaneBaseplate extends Baseplate{}public class Engine {}class CarEngine extends Engine{}class PlaneEngine extends Engine{}public class GearBox {}class CarGearBox extends GearBox{}
class PlaneGearBox extends GearBox {}public class Tyre {}class CarTyre extends Tyre{}
class PlaneTyre extends Tyre{}

然后定义抽象工厂和具体的工厂。这样当需要什么样的产品族,调用对应的工厂类,可以快速切换产品族。

 public interface Ifactory{Engine getEngine();Baseplate getBaseplate();GearBox getGearBox();Tyre getTyre();
}public class PlaneFactory implements Ifactory {public Engine getEngine(){return new PlaneEngine();}public Baseplate getBaseplate(){return new PlaneBaseplate();}public GearBox getGearBox(){return new PlaneGearBox();}public Tyre getTyre(){return new PlaneTyre();}
}public class CarFactory implements Ifactory {public Engine getEngine(){return new CarEngine();}public Baseplate getBaseplate(){return new CarBaseplate();}public GearBox getGearBox(){return new CarGearBox();}public Tyre getTyre(){return new CarTyre();}
}

6. 工厂模式与IOC容器

两者的思路都是基于工厂模式,但IOC容器更加强大复杂,IOC容器通过反射动态加载创建对象。一、能够根据配置文件解析。二、支持原型模式、单例模式创建对象。三、支持Bean生命周期管理,如懒加载,能够配置对象的 init 和 destory。

总结

工厂模式将构建对象的职责封装起来了,增加了代码复用性。抽象工厂能够快速将一组产品替换为另一组。工厂模式是思路在IOC容器中使用到,但IOC容器是依托反射实现对象构造的。

设计模式系列在github上有一个开源项目,主要是本系列博客的demo代码。https://github.com/forestnlp/designpattern
如果您对软件开发、机器学习、深度学习有兴趣请关注本博客,将持续推出Java、软件架构、深度学习相关专栏。
您的支持是对我最大的鼓励。

二、工厂模式——在工厂里能找到你的对象相关推荐

  1. JavaScript 前端简单工厂模式、工厂方法模式、抽象工厂模式优缺点及详解 — 设计模式《二》

    工厂模式 前言:就前端 JavaScript 语言来说,可以把简单工厂模式.工厂方法模式.抽象工厂模式归纳为一种即工厂模式: 一. 简单工厂模式 介绍/概述: 简单工厂模式的工厂类一般是使用静态方法, ...

  2. 创建型模式:工厂模式(简单工厂+工厂方法+抽象工厂)

    一.引子 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰).Bmw(宝马).Audi(奥迪)),还雇了司机为他开车.不过,爆发户坐车时总是这样:上Benz车后跟司机说"开奔驰车!& ...

  3. JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  4. 工厂模式——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)...

    工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Factory):不利于产生系列产品: 2)工厂方法模式(Factory Method):又称为多形性工厂: 3) ...

  5. 工厂模式 java_JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  6. java web简单工厂模式_JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  7. JAVA工厂模式优缺点_简单工厂模式、工厂模式和抽象工厂模式区别及优缺点

    各位小伙伴好,今天给大家主要介绍一下简单工厂模式.工厂模式和抽象工厂模式的区别及各自的优缺点. (本文实现语言为Python3) [前言] 众所周知今天所讲的内容是 设计模式的一类:对于设计模式这个概 ...

  8. 深入理解设计模式-简单工厂模式vs工厂方法模式vs抽象工厂模式对比讲解

    文章目录 前言 一.简单工厂模式 1.描述 2.特点 3.优缺点 4.类图说明 二.工厂方法模式 1.描述 2.特点 3.适用场景 4.类图说明 5.简单工厂模式与工厂方法模式区别: 三.抽象工厂模式 ...

  9. 简单工厂模式、工厂模式和抽象工厂模式区别及优缺点

    各位小伙伴好,今天给大家主要介绍一下简单工厂模式.工厂模式和抽象工厂模式的区别及各自的优缺点. (本文实现语言为Python3) [前言] 众所周知今天所讲的内容是设计模式的一类:对于设计模式这个概念 ...

最新文章

  1. X3650M3 客户端联不上加密狗!
  2. 加入/ LINQ和Lambda的位置
  3. django中如何优雅的处理一个多按钮的表单
  4. 再见 JDK ...
  5. java 三元 代替 if_Java 中三元和 if else 哪个的效率比较高,有底层解释吗,谢谢了!...
  6. 转https_免费!这个PPT转PDF的方法不学可惜!
  7. java 管理后台前台分离_系统前台后台是否应该分离(包括部署)
  8. 移动客户端UI设计指南
  9. Visual Studio Code 构建C/C++开发环境
  10. 解决mescroll固定位置上拉加载无效果?真的只需一步
  11. 南通市城管局推动“数字化城管”向“智慧城管”升级
  12. S32DS中链接文件及启动代码学习
  13. 大数据平台及挖掘调研
  14. 【线性代数】行列式和矩阵的关系
  15. 关闭 Eureka 的自我保护机制
  16. 组合数学之二 —— 容斥原理及应用
  17. 【ROOT from CERN】——TSpectrum2类与二维寻峰
  18. parameterType、parameterMap与resultMap
  19. 畅游CTO洪晓健:BW和CE3游戏引擎各取所长
  20. JAVA项目:后台管理页面——显示数据库中所有信息+删除和编辑(MySQL)

热门文章

  1. 43 迷宫问题(避免走重复路径)
  2. js+html+css实现本地聊天室
  3. 520这份花式表白攻略请查收
  4. MUI底部菜单栏 uniapp 底部菜单栏
  5. 【Midjourney】Midjourney Prompt 提示词 ① ( 贴纸风格 | A 扮演 B 角色 | 对称扁平 Logo 图标设计 | 列表图片 | 平行 / 直角 排列元素 )
  6. Android模拟键盘和键盘监听
  7. 业界个人观系列 msup技术开放日
  8. 大型建企招聘,大量岗位可选择
  9. swt入门---http://www.blogjava.net/dreamstone/archive/2007/08/02/134074.html
  10. Java正则表达式及Pattern与Matcher使用详解