Factory Method 工厂方法

news2024/11/29 10:39:31

意图

定义一个用户创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到其子类

结构

其中

  • Product定义工厂方法做创建的对象的接口。
  • ConcreteProduct实现Product接口
  • Creator声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的默认实现,它返回一个默认的ConcreteProduct对象,可以调用工厂方法以创建一个Product对象。
  • ConcreteCreator重定义工厂方法以返回一个ConcreteProduct示例。

适用性

  • 当一个类不知道它所必须创建的对象的类的时候。
  • 当一个类希望有他的子类来指定他所创建的对象的时候
  • 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮组子类是代理者这一信息局部化的时候。

代码示例

// 产品接口
interface Product {
    void doSomething();
}

// 具体产品A
class ProductA implements Product {
    @Override
    public void doSomething() {
        System.out.println("ProductA do something");
    }
}

// 具体产品B
class ProductB implements Product {
    @Override
    public void doSomething() {
        System.out.println("ProductB do something");
    }
}

// 工厂接口
interface Factory {
    Product createProduct();
}

// 具体工厂A
class FactoryA implements Factory {
    @Override
    public Product createProduct() {
        return new ProductA();
    }
}

// 具体工厂B
class FactoryB implements Factory {
    @Override
    public Product createProduct() {
        return new ProductB();
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        // 使用工厂A创建产品A
        Factory factoryA = new FactoryA();
        Product productA = factoryA.createProduct();
        productA.doSomething(); // 输出: ProductA do something

        // 使用工厂B创建产品B
        Factory factoryB = new FactoryB();
        Product productB = factoryB.createProduct();
        productB.doSomething(); // 输出: ProductB do something
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1586646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

海外软文通稿代发 - 大舍传媒

引言 在当今高度信息化的时代,企业和个人品牌形象的塑造与传播变得越来越重要。为了在国际舞台上获得更大的竞争优势,许多企业和品牌纷纷将视线投向了国外市场。而在这个过程中,专业的软文通稿代发服务成为了他们的得力助手。本文将向您介绍…

milvus各组件的结构体分析

milvus各组件的结构体分析 各组件启动,需要构建各组件的结构体,一共8个。 runComponent(ctx, localMsg, wg, components.NewRootCoord, metrics.RegisterRootCoord) runComponent(ctx, localMsg, wg, components.NewProxy, metrics.RegisterProxy) run…

HTTPS证书是什么?申请方法是什么?

HTTPS证书是互联网上由权威证书颁发机构(CA)签发的数字文件,用于证明网站的身份,并通过其中包含的公钥为网站启用HTTPS加密连接,确保用户与网站间的通信数据安全且不可被第三方窃取或篡改。 怎么申请? 一&…

什么是云原生

什么是云原生 云原生的定义 aws: 云原生是在云计算环境中构建、部署和管理现代应用程序的软件方法。现代公司希望构建高度可伸缩、灵活和有弹性的应用程序,以便能够快速更新以满足客户需求。为此,他们使用了支持云基础设施上应用程序开发的现…

【低成本-点云采集】使用XRFoundation实现点云采集

使用XR Foundation 现基于XR Foundation的接口实现渲染和采集 关键类 ARPointCloudManager 介绍 ARPointCloudManager:ARTrackedObjects的管理器。使用XRDepthSubsystem来识别和跟踪物理环境中的深度数据。 属性 NameDescriptiongameObjectNameThe name to b…

接口自动化入门: Requests请求头设置详解!

在进行接口自动化测试时,设置请求头是非常重要的一步。请求头可以包含各种信息,例如身份验证、内容类型、接受语言等。在实际的测试中,我们使用Python的Requests库来发送HTTP请求,并设置请求头来模拟不同的场景和需求。 下面将通…

【炒股Zero To Hero】MACD金叉死叉到底是否有效,加上这个指标回报率增加197倍

移动平均收敛散度(MACD - Moving Average Convergence Divergence)是一种趋势跟踪动量指标,显示了证券价格的两个移动平均之间的关系。它用于识别趋势的方向和强度,属于技术分析中振荡器的一类。 MACD如何衡量股票及其趋势 有两…

一天300收入打底,​一个适合任何人的创业项目!

共享旅游卡项目,一天300收入打底,一个适合任何人的创业项目! 只要你不懒,生活总过得不会太差。只要你不贪,就算不能大富大贵,至少不会负债累累。 人性最难戒掉的两个字:一个是懒,另…

五、书架开发--1.书架标题组件交互、获取书架数据

添加书架页面,做路由配置 首先添加书架页面,到views中的store中添加一个StoreShelf表示书架 然后到路由中进行注册 然后书城首页的返回键我们是想要点击返回的话就跳转到书架页面,所以如下this.$router.push(/store/shelf) 做书架标题组件 …

python|pandas的loc

159就是一行。 ac就是那两行

20232831 2023-2024-2 《网络攻防实践》第5次作业

目录 20232831 2023-2024-2 《网络攻防实践》第5次作业1.实验内容(1)防火墙配置(具体IP配置参考自己的IP设置)(2)动手实践:Snort(3)分析配置规则 2.实验过程3.学习中遇到…

知了汇智鸿蒙系列讲座进校园,赋能产业数字化升级,助力创新人才培养

随着信创国产化战略的深入推进,以及万物互联时代的加速到来,信息技术产业正迎来前所未有的发展机遇。在这一背景下,成都知了汇智科技有限公司作为产教融合领域的先行者,积极响应国家号召,通过举办鸿蒙系列讲座进校园活…

算法与程序设计(实验2)----分治法求最近点对问题

一.实验目的 掌握分治法思想。学会最近点对问题求解方法。 二、实验内容 1. 对于平面上给定的N个点,给出具有最短距离的两点。 2. 要求随机生成N个点的平面坐标,应用蛮力法编程计算出所有点对的最短距离。 3. 要求随机生成N个点的平面坐…

unity动画的关键帧添加event-同步语音

在iclone中做的语音嘴型动画,因是用下图自带的方式语音生成的动画,而不是用plugin(面捕live会连同语音一起导出),所以导出来到Unity中,之后口型、动作、表情等没有声音。 我需要把原有的语音也重新在unity中加载上,原来…

[lesson19]对象的构造(下)

对象的构造(下) 特殊的构造函数 两个特殊的构造函数 无参构造函数 没有参数的构造函数当类中没有定义构造函数时,编译器默认提供一个无参构造函数,并且其函数体为空 拷贝构造函数 参数为const class_name&的构造函数当类中没有定义拷贝构造函数时&…

React复习全攻略:浅尝Redux的全局滋味

是什么? Redux 是一个使用叫做 “action” 的事件来管理和更新应用状态的模式和工具库 提供全局状态数据的单一仓库(对象树),管理应用的全局状态单一数据源,状态只读,状态修改只由纯函数完成 为什么用(特点…

C语言操作符详解(三)

一、表达式求值 1.1整型提升 C语言中整型算术运算总是至少以缺省整型类型的精度来进行的。 为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。 如何进行整型提升呢? 1. 有符号整数提升是按…

如何理解Fourier Neural Operator (FNO)

写这篇blog是因为多方参考才读懂这两篇文章,希望能用自己的语言表达出来加深一下理解。因为是刚刚开始学习这部分内容,错误之处敬请指出。 文章目录 前言算子Operator概念理解问题建立Graph Neural Operator的思想证明采样多少个数据点可以用来表示一组a…

五金件外观检测机如何确保产品质量?

五金件是指由金属材料制成的各种零部件或制品,主要用于各种机械设备、工具、建筑结构以及其他领域。五金件通常由金属加工、铸造、锻造等方式制造,具有耐久性、强度高、稳定性强等特点。应用于工业制造、建筑、家具、汽车、电子产品等领域。 本案五金件尺…

Linux使用C语言实现Socket编程

Socket编程 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 网络套接字 socket: (电源)插座(电器上的)插口,插孔,管座 在通信过程中, 套接字是成对存在的, 一个客户端的套接字, 一个…