介绍

工厂模式(Factory Pattern) 是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

主要解决:接口选择的问题。

何时使用:我们明确地计划不同条件下创建不同实例时。

如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。

关键代码:创建过程在其子类执行。

应用实例: 1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。 2、Hibernate 换数据库只需换方言和驱动就可以。

优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。

缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

使用场景: 1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。 2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。 3、设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。

注意事项:作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。

实现

一、创建一个车辆接口

public interface Car {void create();
}

二、实现类


public class SGMW implements Car {public void create() {System.out.println("生产了一辆五菱宏光miniev");}
}public class Porsche implements Car {public void create() {System.out.println("生产了一辆保时捷911");}
}public class BayerischeMotorenWerke implements Car {public void create() {System.out.println("生产了一辆宝马X6");}
}

三、工厂类

public class CarFactory {// 通过传入的名称造车public static Car getCar(String name) {Car car;switch (name) {case "porsche":car = new Porsche();break;case "sgmw":car = new SGMW();break;case "bmw":car = new BayerischeMotorenWerke();break;// 默认创建奥迪A4default:car = () -> System.out.println("创建了奥迪A4");break;}return car;}}

四、测试类

public class FactoryTest {public static void main(String[] args) {// 生产保时捷Car porsche = CarFactory.getCar("porsche");porsche.create();// 生产五菱宏光Car sgmw = CarFactory.getCar("sgmw");sgmw.create();// 生产宝马Car bmw = CarFactory.getCar("bmw");bmw.create();}
}

设计模式学习之工厂模式(附demo)相关推荐

  1. 设计模式 - 学习笔记 - 工厂模式Factory Pattern

    设计模式 - 学习笔记 - 工厂模式Factory Pattern 1. 简单工厂 1.1 应用场景 1.2 UML 1.3 优劣分析 好处 缺点 1.4 代码示例 抽象产品 AbstractProd ...

  2. Java设计模式学习之工厂模式

    简单工厂模式 我直接上代码代码里有很详细的注解 //简单工厂模式 是由一个工厂对象决定创建出哪种产品 class Factory1 {publicstatic void main(String[] a ...

  3. 设计模式学习总结——工厂模式

    在我们平常创建对象的时候,都是通过关键字 new 来实现的,例: Class A = new A() . 在一些情况下,要创建的对象需要一系列复杂的初始化操作,比如查配置文件.查数据库表.初始化成员对 ...

  4. 设计模式学习2 工厂模式

    工厂模式其实就是简单模式的升级版本, 简单模式将界面与业务逻辑区分开,但是如果不停的增加计算器的运算方式,简单模式中的工厂Factory 中判断的业务逻辑会变非常复杂,这不符合封装的原则. 所以在此之 ...

  5. Java设计模式学习02——工厂模式

    工厂模式 工厂模式主要是为创建对象提供接口,将创建对象的过程隔离起来,实现了创建者与调用者的分离,提高了程序的灵活性.  核心本质: 实例化对象,用工厂方法代替new操作. 将选择实现类.创建对象统一 ...

  6. 设计模式学习-工厂方法模式

    在上文(设计模式学习-简单工厂模式)的模拟场景中,我们用简单工厂模式实现了VISA和MASTERARD卡的刷卡处理,系统成功上线并运行良好,突然有一天老大跑来说,我们的系统需要升级,提供对一般银联卡的 ...

  7. 一起学习设计模式--02.简单工厂模式

    工厂模式是最常用的一类创建型设计模式.我们所说的工厂模式是指工厂方法模式,它也是使用频率最高的工厂模式. 简单工厂模式是工厂方法模式的小弟,它不属于GoF 23种设计模式,但是在软件开发中应用也颇为频 ...

  8. 设计模式学习笔记——工厂(Factory)模式

    设计模式学习笔记--工厂(Factory)模式 @(设计模式)[设计模式, 工厂模式, factory] 设计模式学习笔记工厂Factory模式 基本介绍 工厂案例 类图 实现代码 framework ...

  9. 【设计模式学习】工厂方法模式

    cpp学习设计模式:工厂方法模式 在学习工厂方法模式之前,先回忆前面学的简单工厂模式: 简单工厂模式就是将对象的创建和逻辑的判断都交给了一个工厂类去做,这样做的优点是客户端不需要知道具体产品类的类名和 ...

最新文章

  1. VS上配置opencv249所添加的附加依赖项
  2. 如何获得Oracle系统性能统计? Oracle大型数据库系统在AIXUNIX上的实战详解 集中讨论 14...
  3. STL——内存基本处理工具
  4. Ora-12154:无法解析连接字符串
  5. 002 通过send断点分析功能call
  6. php json转数组_相同逻辑的php与golang代码效率对比,最好语言落谁家…
  7. 构建根文件系统(2)Busybox init 进程
  8. django mysql 表单_Python Django 表单提交数据到mysql并展示
  9. 数据结构和算法(06)---二叉树(c++)
  10. docker 空间满数据迁移笔记
  11. 网上无意中看到的一句话。。。
  12. springboot踩过的坑
  13. python程序员工资-均薪3万?Python程序员就业各岗位薪资一览,你拖后腿了吗?...
  14. Matlab画图颜色设置
  15. WPS Office Pro 2016 专业版
  16. 面试必问:TCP和UDP的区别(附面试题)
  17. 库卡profinet通讯中文说明书
  18. java 调用三角函数_Java中的三角函数方法
  19. 关于 Private strand flush not complete
  20. java将silk文件转换成MP3

热门文章

  1. 音视频技术开发周刊 62期
  2. Tmall_Fore_home
  3. Gos ——BIOS与继承者MBR
  4. [转]split命令:对文件进行分割
  5. springboot文献综述
  6. 电容电阻电感在电路中的作用
  7. 手机便签内容怎么分享到微博上?
  8. 服务器托管是什么?需要注意哪些问题?
  9. Kaggle 新赛 | GoDaddy 小微企业密度预测
  10. 关于SWOT,你了解多少?