什么是工厂模式java

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

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

简单的讲就是用工厂方法代替了new的操作,在通俗点就是说,你new一个对象的时候直接调用工厂方法就行了,在编程时,需要定义一个工厂接口,由不同的的子类去实现,再定一个具体工厂类,定义一个产生实例的方法,我们通过这个方法来获得实例就行了。

优点:

1、一个调用者想创建一个对象,只要知道其名称就可以了。

2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。

3、屏蔽产品的具体实现,调用者只关心产品的接口。

缺点:

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

应用实例:

1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。

工厂模式的简单实现如下://所有车的接口 有一个共同改的方法 开车

public interface Car {

public void drive();

}

//奥迪类 实现car接口因为奥迪车也是车 肯定可以开的嘛

public class Audi implements Car {

public Audi(){

System.out.println("生产出一辆奥迪");

}

@Override

public void drive() {

System.out.println("开奥迪");

}

}

//宝马类 实现car接口因为宝马车也是车 肯定也可以开

public class Bmw implements Car{

public Bmw(){

System.out.println("生产出一辆宝马");

}

@Override

public void drive() {

System.out.println("开宝马");

}

}

//生产车的工厂 该工厂接收一个车名 你只需要告诉他你要生产什么车 就可以生产出对应的车出来

public class CarFactory {

public static Car getCar(String caename){

if(caename.equals("audi")){

return new Audi();

}else if(caename.equals("bmw")){

return new Bmw();

}

return null;

}

}

//测试

public class Test {

public static void main(String[] args) {

//告诉工厂类 你需要生产出一辆奥迪车 那么给昂他传一个参数audi进去

Car audi = CarFactory.getCar("audi");

//就可以生产出奥迪的车 调用开车的方法就可以开车啦

audi.drive();

//宝马类似

Car bmw = CarFactory.getCar("bmw");

bmw.drive();

}

}

输出:

成产出一辆奥迪

开奥迪

生产出一辆宝马

开宝马

java汽车生产工厂模式_什么是工厂模式java相关推荐

  1. 抽象工厂模式_设计模式——抽象工厂模式

    阅读目录 使用频率:★★★★★ 一.什么是抽象工厂模式 二.补充说明 三.角色 四.例子 使用频率:★★★★★ 一.什么是抽象工厂模式 就是对一组具有相同主题的工厂进行封装(维基百科解释的很到位): ...

  2. java严格模式_“use strict” 严格模式使用(前端基础系列)

    ECMAscript5添加一种严格模式的运行模式("use strict"),让你的js语句在更加严格的环境下进行运行: 一.主要作用: 消除版本javascript中一些不合理及 ...

  3. java单例模式恶汉模式_单例模式之懒汉模式恶汉模式

    单例模式,其实就是对于一个类,只能新建一个对象,不能有多个重复的对象.这样使得在程序在运行时,比如日志加载时能找到唯一的对象,以至正确匹配.就类似于一山不能有二虎一样.主要的思想其实就是运用stati ...

  4. java webservice报文过长_工作1-5年的Java程序猿到底需要怎样的一个技术栈?

    工作1-5年的Java程序猿到底需要怎样的一个技术栈? 前言: 具有1-5年开发经验的程序员 需要学习的内容其实还有很多很多. 今天跟大家交流一下希望分享出来的对大家能够有帮助,这是我这些年总结出的一 ...

  5. java是脚本语言吗_从脚本语言到Java

    从脚本语言到Java 板桥里人 jdon.com 2002/3 以前我是一直用脚本语言,使用多了,不知不觉一直把数据库设计当作系统设计的主要任务,使用java后,我觉得数据库设计只是一个基础 和前期工 ...

  6. 无忧考吧2017二级java_无忧考吧二级JAVA超级模拟软件下载_无忧考吧二级JAVA超级模拟软件官方下载-太平洋下载中心...

    无忧考吧二级JAVA超级模拟软件是一款可以帮助用户朋友来学习计算机二级java语言考试的软件,使用这款二级java模拟考试软件可以帮助用户快速的掌握学习内容和操作逻辑,让你顺利的通过二级java考试. ...

  7. java 序列化概念和作用_结合代码详细解读Java序列化与反序列化概念理解

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...

  8. java调用打印预览_急求一个用Java实现的打印及打印预览功能的Demo

    展开全部 package com.szallcom.tools; import java.awt.BorderLayout; import java.awt.Color; import java.aw ...

  9. java和python混合编程_浅谈C++与Java混合编程

    在学习编程的过程中, 我觉得不止要获得课本的知识, 更多的是通过学习技术知识提高解决问题的能力, 这样我们才能走在最前方, 更 多 Java 学习,请登陆疯狂 java 官网. 现实的情况是, 真实的 ...

  10. 怎么把java安装进老年机_环境搭建 - 老人与JAVA - 博客园

    安装JDK 1:下载安装 在这个页面可以看到最新的版本,在这个页面的最下方有一个入口可以下载历史版本: 警告:这些年长的JRE和版本的JDK提供帮助开发人员调试问题在更旧的系统.他们不是最新的安全补丁 ...

最新文章

  1. Ubuntu18.04安装keras(tensorflow)从无到有实录
  2. 听说过OpenJDK,没说过OpenValueJDK吧?
  3. category android:name=android.intent.category.DEFAULT / 惹的祸
  4. HDU6223 - Infinite Fraction Path
  5. 用jsonserve和axios做交互_详解解决使用axios发送json后台接收不到的问题
  6. 《精通 ASP.NET MVC 5》----1.5 本书的结构
  7. 计算机网络图标显示不出来,网络图标不见了汇总解决教程
  8. 1分钟教会你cad如何转pdf
  9. b85主板装服务器系统,华硕b85主板装不上win7怎么办
  10. 云风:游戏数值公式的表象与本质
  11. python日期相减得到年龄_在dataframe两列日期相减并且得到具体的月数实例
  12. 四级网络工程师笔记-操作系统(中)
  13. python中sub函数用法_Python pandas.DataFrame.sub函数方法的使用
  14. springcloud2.2.1 oauth2实现用户认证授权及sso
  15. 2021-10-09
  16. QPBOC快速借贷记流程(2)
  17. oracle操作题——试卷题
  18. Overview of technical writing courses | 技术写作课程概览
  19. 如何防止数据泄密和丢失?22项安全策略,守护企业数据安全
  20. UVM学习笔记—寄存器模型的搭建及使用

热门文章

  1. MATLAB中多个一维数组的合并
  2. Linux 下的格式化输出命令:print
  3. linux命令之查看动态库中字符串-strings
  4. python大学教程吕云翔课后题答案_软件工程实用教程吕云翔-课后答案.doc
  5. shader 2: vertex, fragment, surf的区别
  6. Docker进阶(制作镜像,共享卷,网络通信,私有仓库)
  7. 了解Access安全性
  8. asp自动生成html文件的方法
  9. 阿里开源那个牛哄哄问题排查工具竟然不会用?最佳实践来了!
  10. 这个开源项目帮你将Linux命令行一网打尽!