设计模式(2)工厂方法模式

news/2024/12/22 20:19:37/

一、

1、介绍:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。工厂方法模式也即将简单工厂模块的Factory工厂类拆成接口,再定义具体的工厂子类去实现。

2、结构图

 3、代码

/*** 虚拟工厂类* 给具体的工厂类提供虚拟方法*/
abstract class AbstractFactory {// 表示创建产品的方法,此处使用的是通过具体的产品类的Class来确定需要创建的产品// 也可以通过String等其他方式来指定public abstract <T extends AbstractProduct> T create(Class<T> tClass);}
/*** 具体工厂类* 继承虚拟工厂类,提供真正的创建对象的方法的实现*/
class CommonFactory extends AbstractFactory{@Override // 对虚拟工厂类的方法进行重写public <T extends AbstractProduct> T create(Class<T> tClass) {T product = null; // 创建一个null对象作为初始化,使catch到异常后也能有null返回作为结果try {// 明明这样就可以实现,但是书里写的更加复杂// (T)Class.forName(tClass.getName()).newInstance()// 暂时对此感到不解product = tClass.newInstance(); // 通过反射创建新的对象} catch (Exception e) {e.printStackTrace();}return product;}
}
/*** 虚拟产品类* 对产品类的属性以及方法做好规范* 如果有所有具体产品类都通用的方法也可以直接实现*/
abstract class AbstractProduct {/*** 通用方法*/public void method1() {System.out.println("所有产品都会这么做");}/*** 每个产品实现各异的方法*/public abstract void method2();
}
/*** 具体产品类* 继承虚拟产品类,在虚拟产品类提供的默认方法外,具体实现虚拟类中规定的虚拟方法*/
class Product extends AbstractProduct {@Overridepublic void method2() {System.out.println("这是一个具体的产品类的特性");}
}
class Client {public static void main(String[] args) {AbstractFactory factory = new CommonFactory();AbstractProduct product = factory.create(Product.class);product.method1();product.method2();}
} 


http://www.ppmy.cn/news/1022193.html

相关文章

C++学习| MFC简单入门

前言&#xff1a;因为接手了CMFC的程序&#xff0c;所以需要对MFC编程方面有所了解。 C之MFC简单入门 MFC相关的概念MFCWIN32QT MFC项目基本操作MFC项目创建MFC项目文件解读界面和代码数据交互——加法器 MFC相关的概念 MFC MFC&#xff08;Microsoft Foundation Classes微软…

【重温老古董——Strust2框架】基于Idea使用maven创建Strust2项目

1、新建项目 红色圈出的部分是【强制】,其他部分看个人喜好。 2、修改 pom 文件,管理依赖 <dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.5.22</version></dependency&g…

那些年的Java开发经验记录

Java同步锁(浅显易懂&#xff0c;精简讲解) 详细讲解可以看这篇文章Java对象锁和类锁全面解析&#xff08;多线程synchronized关键字&#xff09; 精简如下&#xff1a; 1.不管什么锁&#xff0c;都是属于对象锁(类也是一种对象) 2.一个对象只有一个锁 3.锁最大可以锁整个…

基于java成人教育教务系统设计与实现

摘要 随着市场经济的产业化结构升级&#xff0c;人才结构也在不断发生这巨大的变化和变革。而且各大企业都在处于一个高速发展和壮大的阶段&#xff0c;在这个高速发展和结构化升级的时期对于人才的需求也在不断的增多。企业和用工单位也不再局限于对高校人才招揽和招聘更多是偏…

汉字形近字(OCR)

近期做中文OCR识别的优化&#xff0c;抓破头皮却收获甚微。 为了百尺竿头更进一步&#xff0c;遂将目光聚焦在中文汉字特有的形近字和生僻字问题上&#xff0c;于是怒发整理形近字大全&#xff08;花了不少刀&#xff09;&#xff0c;希望对同行朋友们也有帮助&#xff1a; 地表…

SLAM框架与相关理论梳理

应该是思维导图的形式使用markmap实现,可以使用md文档在VSCode中添加插件预览,预览图如绑定的那个资源的样式。 效果大概是长这个样子 > 但是CSDN不好用,一堆乱码。这里建议从这个链接中复制下载md文件,使用VSCode的markmap插件查看,或者直接把md的内容复制到markmap网…

【JS常见数据结构】

JS数据结构 前言数组JavaScript 中数组的常见操作&#xff1a;1. 创建数组&#xff1a;2. 访问数组元素&#xff1a;3. 插入元素&#xff1a;4. 删除元素&#xff1a;5. 查询元素&#xff1a; 链表单向链表双向链表循环链表 栈队列树二叉树示例 图图的定义图的分类图的表示方法…

MAUI+Blazor 如何开启浏览器调试工具

文章目录 前言如何开启调试模式输入快捷键打开浏览器有什么意义&#xff1f; 前言 MAUIBlazor其实就是浏览器套壳&#xff0c;我觉得很有意义&#xff0c;因为现在性能已经不是主要的限制了&#xff0c;很多时候讲究的快速开发。而且MAUIBlazor跨平台的未来感觉实在是太香了。…