文章目录

  • 什么是工厂模式
  • 一:定义一个公共接口Avenger
  • 二:定义不同的英雄实现相应的接口
  • 三:我们需要定义一个类似工具类AvengerFactory复仇者工厂来动态生成超级英雄
  • 测试
  • 总结

什么是工厂模式

简介

工厂模式(Factory Pattern)是 Java中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

比如当我们想用多种数据源,mysql,sqlserver等等时,我们就可以用工厂模式方便的切换实现。或者我们在对一个接口有多种实现时,我们就可以使用工厂模式来动态干干净净的选择我们需要的实现方式来完成我们的业务功能,这里我使用复仇者的例子,来大概模拟一下具体是怎么实现的。这次请到钢铁侠,蜘蛛侠,和雷神同志出来帮一下忙。

一:定义一个公共接口Avenger

因为我们到最后都是要用一个接口来接收我们不同的实现类的,所以这里我们定义一个复仇者Avenger接口,我们给接口定义一个超级能力的方法,供给具体的英雄们去发挥。

public interface Avenger {void superPowers();
}

二:定义不同的英雄实现相应的接口

首先是钢铁侠

public class IronMan implements Avenger {@Overridepublic void superPowers() {System.out.println("超能力?钞能力!");}
}

再就是蜘蛛侠

public class SpiderMan  implements Avenger{@Overridepublic void superPowers() {System.out.println("飞檐走壁,吐丝。");}
}

再就是雷神

ublic class Thor implements Avenger {@Overridepublic void superPowers() {System.out.println("雷神之锤,发闪电!");}
}

三:我们需要定义一个类似工具类AvengerFactory复仇者工厂来动态生成超级英雄

当我们需要使用某种实现类时,我们只需要调用里面的getAvenger并传入对应的英雄名称就可以得到对应的示例。

public class AvengerFactory {public Avenger getAvenger(String avengerType) {if (avengerType == null) {return null;} else if (avengerType.equalsIgnoreCase("IRONMAM")) {//equalsIgnoreCase忽略大小写return new IronMan();} else if (avengerType.equalsIgnoreCase("SPIDERMAN")) {return new SpiderMan();} else if (avengerType.equalsIgnoreCase("THOR")) {return new Thor();}return null;
//        switch (avengerType) {//jdk7后也可以用switch来代替if else
//            case "IRONMAM":
//                return new IronMan();
//            case "SPIDERMAN":
//                return new SpiderMan();
//            case "THOR":
//                return new Thor();
//            default:
//                return null;
//        }}
}

测试

public class Test {public static void main(String[] args) {AvengerFactory avengerFactory = new AvengerFactory();Avenger avenger1 = avengerFactory.getAvenger("IRONMAM");avenger1.superPowers();Avenger avenger2 = avengerFactory.getAvenger("SPIDERMAN");avenger2.superPowers();Avenger avenger3 = avengerFactory.getAvenger("THOR");avenger3.superPowers();}
}

总结

  工厂模式是一个很实用的设计模式,无论是在开发大型的项目或者是在阅读源码时,都是非常重要的,它能够让我们的代码变的整洁,逻辑清楚,就像我们想吃不同的口味的辣条的时候,我们不用管它是飞旺还是卫龙,我们只需要一个机器,告诉他你想要什么,他就会给你什么,很干净,很方便。

如果本文对你有帮助,请给我一个赞哦。

日月还长,加油后浪!

工厂模式与超级英雄的那些事儿相关推荐

  1. 设计模式系列·抽象工厂模式

    前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...

  2. 由浅到深了解工厂模式

    作者 点先生 日期 2018.9.26 唠个嗑 先给各位观众老爷道个歉,在上一篇文章的末尾本来说了这次要给大家分享代理模式,但是臣妾,做不到啊! 最近公司给我了一个新项目,于是比较忙一点,再加上代理模 ...

  3. php注册树模式,php基础设计模式大全(注册树模式、工厂模式、单列模式)

    废话不多说了,先给大家介绍注册树模式然后介绍工厂模式最后给大家介绍单列模式,本文写的很详细,一起来学习吧. php注册树模式 什么是注册树模式? 注册树模式当然也叫注册模式,注册器模式.之所以我在这里 ...

  4. 创建型模式---工厂模式

    从简单到复杂有简单工厂模式-->工厂方法模式-->抽象工厂模式 简单工厂模式(Simple Factory Pattern) 定义 又称为静态工厂方法(Static Factory Met ...

  5. springboot工厂模式_最新整理138道阿里、快手等大厂面试题解析:基础+Spring+并发+JVM+设计模式+缓存...

    这些题目都是阿里.百度.美团.快手等一线互联网公司面试被问到的题目.熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率,希望可以帮助大家,祝大家求职顺利! Java集合22题 ArrayList ...

  6. JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·简单工厂——区分“变与不变”

    JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·简单工厂--区分"变与不变" 先来说说构造器 在介绍工厂模式之前,为了辅助大家的理解,我想先在这儿给大家介绍 ...

  7. Java设计模式全集-工厂模式系列(Factories)

    工厂模式系列(Factories) 之所以用factories是因为工厂模式有好几种实现,工厂模式的运用主要的核心在于将一组通用的抽象对象交由工厂去进行具体的实现,屏蔽加工的细节 比如说,我需要一台电 ...

  8. 【Spring】工厂模式解耦

    问题: 程序的耦合    耦合:程序间的依赖关系    包括:类之间的依赖       方法之间的依赖 解耦:降低程序之间的耦合关系    实际开发:编译期不依赖,运行期才依赖    解耦思路:    ...

  9. GOF23设计模式(创建型模式)工厂模式

    目录: 一:工厂模式的核心本质 二:关于面向对象的六大基本原则 三:工厂模式的三大类详解(代码示例,详细分析) 首先,上咱本GOF23所有工厂模式的分类表格!!! 创建型模式 单例模式.工厂模式.抽象 ...

最新文章

  1. 中心化,去中心化?关乎互联网未来命运的重要选
  2. day3_python学习笔记_chapter5_数字
  3. Android APK反编译得到Java源代码或资源文件
  4. 为什么说线索二叉树是一种物理结构
  5. imfunny-技术人员创业的己见
  6. 第一章 SDN介绍 (附件2)【SDNNFV基础、云计算】
  7. python控制台动画_Python真神奇,带你体验另类的“全自动编程”
  8. Shell中I/O重定向的用法笔记
  9. Oracle入门(十二D)之表删除与删除表数据
  10. Tensorflow 十六 用tf.keras函数重写Mnist识别
  11. C#中的文件操作 (一)
  12. java位运算和字节编码(一)
  13. eventlog analyzer 8.0
  14. 官网下载历史版本的tomcat
  15. 集成测试的策略详解:
  16. 【Python数据挖掘】用朴素贝叶斯预测人类活动识别
  17. 【第2篇】基础数据类型
  18. AngularJs错误
  19. 将Liunx装入移动硬盘,实现即插即用
  20. 数据库 Mysql 终端代码

热门文章

  1. pta c语言段错误,PTA常见错误
  2. 一些名词解释记录--计算机网络实验
  3. 通过支付宝服务中断事件看系统可靠性和YunOS的可靠性
  4. Python网络编程-一文厘清socket、TCP和UDP那点事
  5. 【微信小程序】多多房产小程序V2.5.81全开源安装包+小程序前端,一款专属于您的置业顾问小程序源码
  6. P1786 帮贡排序
  7. esxi不识别硬盘_esxi在线添加硬盘,系统没有识别到怎么办(重启除外)
  8. win7 光盘计算机修复,大师为您win7系统vd光盘在电脑上打不开的恢复教程
  9. 教师计算机应用基础知识,计算机应用基础
  10. java 打成war_JAVA语言之Springboot打成war包并在tomcat中运行的部署方法