设计模式之(三)---工厂方法模式

2023-11-19

女娲补天的故事大家都听过吧,这个故事是说,女娲在补了天后,下到凡间一看,哇塞,风景太优美了,天空是湛
蓝的,水是清澈的,空气是清新的,太美丽了,然后就待时间长了就有点寂寞了,没有动物,这些看的到
都是静态的东西呀,怎么办?
别忘了是神仙呀,没有办不到的事情,于是女娲就架起了八卦炉(技术术语:建立工厂)开始创建人,
具体过程是这样的:先是泥巴捏,然后放八卦炉里烤,再扔到地上成长,但是意外总是会产生的:
第一次烤泥人,兹兹兹兹~~,感觉应该熟了,往地上一扔,biu~,一个白人诞生了,没烤熟!
第二次烤泥人,兹兹兹兹兹兹兹兹~~,上次都没烤熟,这次多烤会儿,往地上一扔,嘿,熟过头了,
黑人哪!
第三次烤泥人,兹~兹~兹~,一边烤一边看着,嘿,正正好,Perfect!优品,黄色人类! 【备注:RB 人
不属此列】

那这个过程我们就用程序来表现,首先定义一个人类的总称:

package com.fc.factory;
/**
 * 人类
 * @author fc
 *
 */
public interface Human {
 public  void laugh();
 public  void talk();
 
}

然后定义具体的人,黄种人,白人,黑人:

package com.fc.factory;

public class YellowHuman implements Human {
	public void laugh() {
		System.out.println("黄种人在笑,哈哈哈");

	}

	public void talk() {

		System.out.println("黄种人在讲话");
	}

}

package com.fc.factory;

public class WhiteHuman implements Human {
	public void laugh() {
		System.out.println("白人在笑,哈哈哈");

	}

	public void talk() {

		System.out.println("白人在讲话");
	}

}

package com.fc.factory;

public class BlackHuman implements Human {
	public void laugh() {
		System.out.println("黑人在笑,哈哈哈");

	}

	public void talk() {

		System.out.println("黑人在讲话");
	}

}
人类也定义完毕了,那我们把八卦炉(用于生产人)定义出来:

package com.fc.factory;

public class HumanFactory {
	
 public static  Human createHuman(Class c){
	 Human human=null;
	 try {
		human=(Human)Class.forName(c.getName()).newInstance();
	} catch (InstantiationException e) {
		//  //你要是不说个人类颜色的话,没法烤,要白的还是黑的,你说了才好烤
		System. out.println(" 必须指定人类的颜色");
		e.printStackTrace();
	} catch (IllegalAccessException e) {
		//定义的人类有问题,那就烤不出来了
		System. out.println(" 人类定义错误! ");
		e.printStackTrace();
	} catch (ClassNotFoundException e) {
		//你随便说个人类,我到哪里给你制造去?!
		 System. out.println(" 混蛋,你指定的人类找不到! ");
		e.printStackTrace();
	}
	return human;
	
}
	
}
然后女娲来了,这可是真正的女神啊:

package com.fc.factory;

public class NvWa {

	/**
	 * @param args
	 * @author fc
	 */
	public static void main(String[] args) {
		// 女娲第一次造人,试验性质,少造点,火候不足,缺陷产品
		System.out.println("------------造出的第一批人是这样的:白人-----------------");

		Human whiteHuman = HumanFactory.createHuman(WhiteHuman.class);

		whiteHuman.laugh();
		whiteHuman.talk();
		// 女娲第二次造人,火候加足点,然后又出了个次品,黑人
		System.out.println("\n\n------------造出的第二批人是这样的:黑人-----------------");

		Human blackHuman = HumanFactory.createHuman(BlackHuman.class);

		blackHuman.laugh();
		blackHuman.talk();
		// 第三批人了,这次火候掌握的正好,黄色人类,备注: RB人不属 于此列

		System.out.println("\n\n------------造出的第三批人是这样的:黄色人类 -----------------");

		Human yellowHuman = HumanFactory.createHuman(YellowHuman.class);

		yellowHuman.laugh();
		yellowHuman.talk();
	}

}

好了我们再来看一下输出结果:

------------造出的第一批人是这样的:白人-----------------
白人在笑,哈哈哈
白人在讲话


------------造出的第二批人是这样的:黑人-----------------
黑人在笑,哈哈哈
黑人在讲话


------------造出的第三批人是这样的:黄色人类 -----------------
黄种人在笑,哈哈哈
黄种人在讲话





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设计模式之(三)---工厂方法模式 的相关文章

  • c++享元模式

    享元模式 1 享元模式简介 享元模式在 设计模式 可复用面向对象软件的基础 一书中是这样说的 运用共享技术有效地支持大量细粒度的对象 本质就是对大量细粒度的对象进行共享 不是每个对象都要通过new的方式去创建 而是通过区分对象的内部状态和外
  • C++设计模式(二)观察者模式

    1 观察者模式知识点 1 定义 定义对象间的一种一对多的依赖关系 当一个对象的状态发生改变的时候 所有依赖它的对象都得到通知并自动更新 2 动机 将一个系统分割成一系列相互协作的类有一个常见的副作用 需要维护相关对象间的一致性 我们不希望为
  • 设计模式——原型模式

    原型模式顾名思义 就是指以某个实例为原型 copy出一个新的实例 该实例属性与原型相同或者是类似 很多时候 我们需要创建大量的相同或者相似的对象 如果一个个用new 构造函数的形式去创建的话比较繁琐 就像孙悟空要想变出成千上万个猴子猴孙总不
  • java需会(转载)

    一 基础篇 1 1 Java基础 面向对象的特征 继承 封装和多态 final finally finalize 的区别 Exception Error 运行时异常与一般异常有何异同 请写出5种常见到的runtime exception i
  • Java设计模式-装饰者模式Decorator

    介绍 装饰者模式的核心思想是通过创建一个装饰对象 即装饰者 动态扩展目标对象的功能 并且不会改变目标对象的结构 提供了一种比继承更灵活的替代方案 需要注意的是 装饰对象要与目标对象实现相同的接口 或继承相同的抽象类 另外装饰对象需要持有目标
  • 行为型模式-状态模式

    package per mjn pattern state after 环境角色类 public class Context 定义对应状态对象的常量 public final static OpeningState OPENING STAT
  • 设计模式--Abstract server模式 VS Adapter 模式

    适配器类似于现实世界里面的插头 通过适配器 我们可以将分属于不同类的两种不同类型的数据整合起来 而不必去根据某一需要增加或者修改类里面的方法 Adapter mode和Proxymode的区别 Proxy的关注点是职能转移 通过引入Prox
  • 第12课:生活中的构建模式——想要车还是庄园

    用程序来模拟生活 从剧情中思考构建模式 与工厂模式的区别 与组合模式的区别 构建模式的模型抽象 类图 基于升级版的实现 模型说明 应用场景 故事剧情 下周就要过年了 这是 Tony 工作后的第一个春节 还是在离家这么远的北京工作 所以肯定不
  • 每日一问:你想如何破坏单例模式?

    前言 1 单例是什么 单例模式 是一种创建型设计模式 目的是保证全局一个类只有一个实例对象 分为懒汉式和饿汉式 所谓懒汉式 类似于懒加载 需要的时候才会触发初始化实例对象 而饿汉式正好相反 项目启动 类加载的时候 就会创建初始化单例对象 1
  • linux内核中的设计模式

    创建型 Object Pool Object Pool模式可以提升性能 尤其是在对象的分配 初始化成本高 使用频率高 但使用时间短的情况下 对象池可以设置对象池的大小和回收时间缓存预分配的对象 NT和Linux都有简单的预分配缓存对象的机制
  • [C++]外观模式

    外观模式 Facade Pattern 隐藏系统的复杂性 并向客户端提供了一个客户端可以访问系统的接口 这种类型的设计模式属于结构型模式 它向现有的系统添加一个接口 来隐藏系统的复杂性 这种模式涉及到一个单一的类 该类提供了客户端请求的简化
  • 设计模式之访问者模式

    访问者模式 把被操作的对象作为元素 可变可拓展的操作作为访问者 可以说访问者中有很多操作 然后访问者访问元素 对该元素进行操作 不同的访问者有不同的操作 案例 定义访问者接口 public interface UniversalVisito
  • 【设计模式】工厂模式(Factory Pattern)

    1 概述 工厂模式 Factory Pattern 是最常用的设计模式之一 它属于创建类型的设计模式 它提供了一种创建对象的最佳方式 在工厂模式中 我们在创建对象时不会对客户端暴露创建逻辑 并且是通过一个共同的接口来指向新创建的对象 工厂模
  • 哈工大2020软件构造Lab3实验报告

    本项目于4 21日实验课验收 更新完成 如果有所参考 请点点关注 点点赞GitHub Follow一下谢谢 2020春计算机学院 软件构造 课程Lab3实验报告 Software Construction 2020 Spring Lab 3
  • 设计模式(2)

    2 2 结构型模式 结构型模式一共有七种 其中 适配器模式和装饰模式统称为包装模式 装饰模式和代理模式的类图基本相同 但目的不同 这些有相似目的或者有相似结构的模式需要对其概念辨析清楚 才能较好地掌握 下面将对结构型模式分别进行介绍 2 2
  • Java监听器与观察者模式

    Java监听器与观察者模式 Java中的监听器 Listener 和观察者模式 Observer Pattern 都是用于处理对象间的事件通知和响应的设计模式 它们的目的是在对象之间建立一种松散的耦合 使得一个对象的状态变化可以通知到其他对
  • 设计模式详解---策略模式

    1 策略模式简介 策略模式 Strategy Pattern 是一种行为型设计模式 用于在运行时根据不同的情境选择不同的算法或策略 该模式将算法封装成独立的类 使得它们可以相互替换 而且可以独立于客户端使用它们的方式 1 1 主要角色 上下
  • 在AI技术的无情侵袭下,学学Java的23种设计模式还是非常有必要的

    目前国内80 程序员的主要工作是调用组合api实现各种业务需求 在顶层架构师设定好的框架下 做着重复且无聊的编码工作 如果未来ai被广泛应用 那么被替代的风险是很高的 比较扎心的是 其实目前用ai生成片段代码已经是各个公司比较普遍的做法了
  • 设计模式 原型模式 与 Spring 原型模式源码解析(包含Bean的创建过程)

    原创 疯狂的狮子Li 狮子领域 程序圈 2023 12 19 10 30 发表于辽宁 原型模式 原型模式 Prototype模式 是指 用原型实例指定创建对象的种类 并且通过拷贝这些原型 创建新的对象 原型模式是一种创建型设计模式 允许一个
  • 设计模式(三)-结构型模式(4)-组合模式

    一 为何需要组合模式 Composite 在代码设计中 有种情况是对象之间存在层次关系 即对象之间会存在父结点和子结点的关系 比如在文件管理系统中 所有文件和文件夹形成树状结构 文件夹目录里存在子文件夹和文件 文件夹属于枝结点 文件属于叶结

随机推荐

  • 大数据毕业设计 深度学习图像检索算法研究与实现 - python

    文章目录 0 前言 1 课题简介 2 图像检索介绍 1 无监督图像检索 2 有监督图像检索 3 图像检索步骤 4 应用实例 5 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答
  • oh-my-zsh的各种主题展示,你喜欢哪一个?

    pygmalion virtualenv blink mrtazz sonicradish skaro linuxonly gnzh tjkirch 带时间
  • 物联网毕设分享 - stm32单片机酒精浓度酒驾检测系统 - 物联网 嵌入式

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 硬件设计 MQ 3酒精乙醇传感器模块 SIM800C模块 5 软件说明 系统框图 6 部分核心代码 7 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕
  • cityscapes和foggy_cityscapes数据集使用记录

    cityscapes和foggy cityscapes数据集使用记录 cityscapes 数据集介绍 下载数据集 cityscapes转voc格式 foggy cityscapes 下载数据集 foggy cityscapes转voc格式
  • linux drm 架构 基础

    一 简介 DRM 英文全称Digital Rights Management 可以翻译为 数字版权管理 由于数字化信息的特点决定了必须有另一种独特的技术 来加强保护这些数字化的音视频节目内容 文档 电子书籍的版权 该技术就是数字权限管理技术
  • PAT (Basic Level) Practice (中文) B1034 有理数四则运算 (20 分)(C++)(分数四则运算)

    1034 有理数四则运算 20 分 本题要求编写程序 计算 2 个有理数的和 差 积 商 输入格式 输入在一行中按照 a1 b1 a2 b2 的格式给出两个分数形式的有理数 其中分子和分母全是整型范围内的整数 负号只可能出现在分子前 分母不
  • openGL之API学习(一九三)glGenTextures

    生成纹理单元名 单元名不一定是连续的 但是没有使用的 单元名是相对GL TEXTURE0的 对于单元名1 其实是GL TEXTURE0 1 glGenTextures产生的是一个比较小的整数id 纹理单元名 glActiveTexture激
  • 三分钟带你搞懂分布式链路追踪系统原理

    分布式系统为什么需要链路追踪 随着互联网业务快速扩展 软件架构也日益变得复杂 为了适应海量用户高并发请求 系统中越来越多的组件开始走向分布式化 如单体架构拆分为微服务 服务内缓存变为分布式缓存 服务组件通信变为分布式消息 这些组件共同构成了
  • 前端学习——JavaScript原生实现购物车案例

    一 购物车案例 1 1 案例介绍 今天我们来写另外一个购物车案例 说实话对于我来说这个是花了将近三个小时的时间然后才做出来的 里面可能还存在一些我没有发现的问题 但是能完成基本的功能 对于一些基本的需求都是可以完成的 下面照旧是案例实现的g
  • [Python] wxPython 状态栏组件、消息对话框组件 学习总结(原创)

    1 状态栏组件 1 基本介绍 上图 红框框内的就是状态栏 他可以分成若干个区块 比如上者分为了两个区块 并且比例是固定的 创建时可以指定 每个区块都能够显示 信息 一般通过 绑定事件 实时更新 各个区块的内容 因为状态栏本身 组件 所以除了
  • Dubbo与SpringCloud的区别

    首先来看一个表格 Dubbo 和 SpringCloud 对比 Dubbo SpringCloud 服务注册中心 Zookeeper Spring Cloud Netfilx Eureka 服务调用方式 RPC REST API 服务监控
  • Mysql从入门到精通 (innodb 引擎 锁超时查看以及设置)

    1 查看innodb引擎锁超时时间 show variables like innodb lock wait timeout 2 设置锁超时时间 set innodb lock wait timeout 5 3 代码验证 两个窗口同时开启事
  • tensorflow gpu利用率低_TensorFlow 模型优化工具 — float16 量化将模型体积减半

    我们很高兴在模型优化工具包中添加训练后的半精度浮点量化 float16 quantization 此工具套件包含混合量化 hybrid quantization 训练后整形量化 full integer quantization 和剪枝 p
  • 双向长短期记忆网络(Bi-LSTM)

    在开始之前 首先区分下均命名为RNN 新手很容易混淆的两大神经网络 循环神经网络 Recurrent Neural Network RNN 和递归神经网络 Recurssion Neural Network RNN 递归神经网络 RNN 是
  • 跨时钟域处理方法(一)——打拍

    一 说明 处理跨时钟域的数据可以分为单bit数据和多bit数据 而打拍的方法主要常见于处理单bit数据的跨时钟域问题 打拍的本质是通过添加寄存器 对输入的数据进行延拍 其主要目标是消除亚稳态的影响 常见的是打2拍 也就是添加2级寄存器 二
  • 基于STM32单片机驱动HX711的代码分享,仅供参考

    最近在搞一个需要加入称重模块的项目 在调试的时候也是遇到了很够狗血的问题 也参考了别的工程师的设计 所以 闲话少叙 上代码 HX711 Dout PB9 HX711 SCK PB8 include hx711 h uint32 t HX71
  • 字符串转整形数据

    c 语言字符转化为数字的函数有 atof 将字符串转换为双精度浮点型值 atoi 将字符串转换为整型值 atol 将字符串转换为长整型值 strtod 将字符串转换为双精度浮点型值 并报告不能被转换的所有剩余数字 strtol 将字符串转换
  • 竞赛选题 卷积神经网络手写字符识别 - 深度学习

    文章目录 0 前言 1 简介 2 LeNet 5 模型的介绍 2 1 结构解析 2 2 C1层 2 3 S2层 S2层和C3层连接 2 4 F6与C5层 3 写数字识别算法模型的构建 3 1 输入层设计 3 2 激活函数的选取 3 3 卷积
  • 微信小程序api语法及代码实例(入门到精通)

    前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住分享一下给大家 点击跳转到网站 小程序Api App 全局入口 整个小程序项目中 只允许有一个App入口函数 全局数据 globalData 写在全局的js里 使用this
  • 设计模式之(三)---工厂方法模式

    女娲补天的故事大家都听过吧 这个故事是说 女娲在补了天后 下到凡间一看 哇塞 风景太优美了 天空是湛 蓝的 水是清澈的 空气是清新的 太美丽了 然后就待时间长了就有点寂寞了 没有动物 这些看的到 都是静态的东西呀 怎么办 别忘了是神仙呀 没