java工厂设计模式(java什么是工厂设计模式)

2025-03-28 04:30:02 0

java工厂设计模式(java什么是工厂设计模式)

本文目录

java什么是工厂设计模式

把创建对象的工作,交给一个抽象出来的概念’工厂’去做,就是工厂设计模式。比如,你要新建一个用户对象 User user=new User();这很简单,也好理解。但是如果你用工厂设计模式去做,就算最简单的实现你也得加个类型,如:UserFactory,而里面的代码可能只是: public static User getUser(){return new User();}在使用的时候就是变成:User user = UserFactory.getUser();嗯,看起来是多此一举,没错,我这场景就是多此一举。工厂模式适用场景,首先得有较复杂的子父类结构,再者创建逻辑可能很复杂,这样才有意义,才有必要去使用工厂模式。又或者这个傻逼对象创建起来很消耗性能,且不是非得是全新的才能用,那么可以配合单例模式一起使用,实现对象的复用,达到性能优化的目的。嗯,你可能又会疑惑,啥是单例,给你个很傻的描述:有个神奇的类,他有个神奇的方法,这个方法会帮你创建一个对象,且不管调用几次,怎么调用,他都保证只给你一个,且百分百是同一个。

怎样使用Java实现Factory设计模式

小弟不才,希望借此篇文章,让大虾们共同努力,整理出一份较为完整且容易理解的用Java实现的设计模式源码! /** * Design Pattern In Java * Name:Factory * 目的:利用工厂模式创建两个产品系列Mac和Win * Mac:MacRam,MacCpu * Win:WinRam,WinCpu * A:abstract * C:Concret * Author:blackphoenix * Modify Date:2002-08-17 */ /** * 抽象产品类 Ram Cpu */ abstract class AProductRam { public String getProduct() { return this+“ Product“; } } abstract class AProductCpu { public String getProduct() { return this+“ Product“; } } /** * 具体产品 MacRam,WinRam */ class CProductMacRam extends AProductRam { public String toString() { return “MacRam“; } } class CProductWinRam extends AProductRam { public String toString() { return “WinRam“; } } /** * 具体产品 MacCpu,WinCpu */ class CProductMacCpu extends AProductCpu { public String toString() { return “MacCpu“; } } class CProductWinCpu extends AProductCpu { public String toString() { return “WinCpu“; } } /** *生成一种新的产品系列时,接口改动的代码 */ /* class CProductNewRam extends AProductRam { public String toString() { return “NewRam“; } } class CProductNewCpu extends AProductCpu { public String toString() { return “NewCpu“; } } */ /** * 抽象工厂 AFactory */ interface AFactory { public AProductRam CreateProductRam(); public AProductCpu CreateProductCpu(); } /** * 具体工厂 CFactoryMac * 创建Mac产品系列 × MacRam MacCpu */ class CFactoryMac implements AFactory { public AProductRam CreateProductRam() { return new CProductMacRam(); } public AProductCpu CreateProductCpu() { return new CProductMacCpu(); } } /** * 具体工厂 CFactoryWin * 创建Win产品系列 × WinRam WinCpu */ class CFactoryWin implements AFactory { public AProductRam CreateProductRam() { return new CProductWinRam(); } public AProductCpu CreateProductCpu() { return new CProductWinCpu(); } } /** * 要生成一种新的产品系列时,对客户要派发一个新的产品工厂 * 同时要派生出一种新的具体产品 * CFactoryNew * NewMem,NewCpu */ /* class CFactoryNew implements AFactory { public AProductRam CreateProductRam() { return new CProductNewRam(); } public AProductCpu CreateProductCpu() { return new CProductNewCpu(); } } */ /** * 客户端 * 1.使用FactoryMac创建Mac系列产品:ProductMacRam,ProductMacCpu × 2.使用FactoryWin创建Win系列产品:ProductWinRam,ProductWinCpu * 3.只要知道CFactoryMac,CFactoryWin(具体工厂)和 * AProductRam,AProductCpu(抽象产品)即可,至于具体产品的创建 * 细节客户不用关心 */ class Factory { private static void printProduct(String v) { System.out.println(v); } public static void main(String args) { AProductRam ProductMacRam=null,ProductWinRam=null; AProductCpu ProductMacCpu=null,ProductWinCpu=null; CFactoryMac FactoryMac=new CFactoryMac(); CFactoryWin FactoryWin=new CFactoryWin(); ProductMacRam=FactoryMac.CreateProductRam(); ProductMacCpu=FactoryMac.CreateProductCpu(); ProductWinRam=FactoryWin.CreateProductRam(); ProductWinCpu=FactoryWin.CreateProductCpu(); printProduct(ProductMacRam.getProduct()); printProduct(ProductMacCpu.getProduct()); printProduct(ProductWinRam.getProduct()); printProduct(ProductWinCpu.getProduct()); /** *生成一种新的产品系列时,客户端改动的代码 */ /* AProductRam ProductNewRam=null; AProductCpu ProductNewCpu=null; CFactoryNew FactoryNew=new CFactoryNew(); ProductNewRam=FactoryNew.CreateProductRam(); ProductNewCpu=FactoryNew.CreateProductCpu(); printProduct(ProductNewRam.getProduct()); printProduct(ProductNewCpu.getProduct()); */ } }

java工厂设计模式(java什么是工厂设计模式)

本文编辑:admin

更多文章:


js代码优化(如何通过优化JS代码来适合网站优化)

js代码优化(如何通过优化JS代码来适合网站优化)

本文目录如何通过优化JS代码来适合网站优化代码优化是如何实现的js里怎么用循环优化代码如何优化js代码站内优化代码怎么优化JS代码为什么越优化越慢javascript优化有哪些如何优化javascript性能优化如何通过优化JS代码来适合网

2025年3月26日 14:30

怎么样做表格零基础(零基础学做表格要掌握哪些)

怎么样做表格零基础(零基础学做表格要掌握哪些)

本文目录零基础学做表格要掌握哪些怎么样做表格零基础零基础学做表格要掌握哪些其实任何的学习,掌握知识点背后的规律和规则,就能灵活使用,解决各种难题。所以对于Excel函数,我们只要熟知输入Excle函数公式时要注意的问题,构建函数学习的整体框

2025年2月19日 11:00

row是什么意思翻译(英语Row.Knees,ribs,knees怎么翻译)

row是什么意思翻译(英语Row.Knees,ribs,knees怎么翻译)

本文目录英语Row.Knees,ribs,knees怎么翻译row row row row your boat 的中文翻译Row, row,row your boat中文翻译find 3 in a row是什么意思中文翻译英语Row.Kne

2025年2月20日 07:50

绿色资源网破解版下载(红包猎手为什么总要收费怎样才能做到永久VIP)

绿色资源网破解版下载(红包猎手为什么总要收费怎样才能做到永久VIP)

本文目录红包猎手为什么总要收费怎样才能做到永久VIP绿色资源网很多破解游戏为什么没有破解谁能给个ps下载地址要绿色网站的,破解版的红包猎手为什么总要收费怎样才能做到永久VIP不需要,激活一次就可以了,如果显示未授权,重启一下手机就可以包猎手

2025年3月3日 16:40

androidlistview(android 中listview是怎么用的)

androidlistview(android 中listview是怎么用的)

本文目录android 中listview是怎么用的android ListView用法和属性android 中listview 的用法android listview 控件在什么位置android listview怎么更新数据androi

2025年4月3日 10:30

excel vba 教程(Excel怎么用VBA)

excel vba 教程(Excel怎么用VBA)

本文目录Excel怎么用VBAexcel怎么使用vba代码隐藏行Excel怎么用VBA操作步骤/方法1.打开电脑上的Excel新进一个空白工作蒲。2.右键点击下方菜单栏中的sheet1,选择查看代码。3.在这里就可以打开VBA的界面,即可使

2025年4月2日 08:30

log函数运算公式换底公式(log换底公式是什么)

log函数运算公式换底公式(log换底公式是什么)

本文目录log换底公式是什么log函数加减运算log换底公式是对数函数的换底公式是什么log换底公式是什么log换底公式是:loga(N)=logb(N)/logb(a)。证明:loga(N)=x,则a^x=N,两边取以b为底的对数,log

2025年3月27日 05:40

attribute的意思(attribute是什么意思及反义词)

attribute的意思(attribute是什么意思及反义词)

本文目录attribute是什么意思及反义词attribute和property在英语里有什么区别feature和attribute的区别attribute和property的区别什么是Attributeattribute是什么意思及反义词

2025年2月10日 11:50

flex教程(flex2中文云端怎么用/flex2中文云端源/flex2中文云端源使用图文教程)

flex教程(flex2中文云端怎么用/flex2中文云端源/flex2中文云端源使用图文教程)

本文目录flex2中文云端怎么用/flex2中文云端源/flex2中文云端源使用图文教程java+flex项目如何下手,步骤和思路(详细点)哪位高手帮忙解决下多谢flex4 推荐教程想要学flex,请大家帮忙flex教程给推荐个82flex

2025年3月18日 17:00

atmosphere期刊(如何写cover letter)

atmosphere期刊(如何写cover letter)

本文目录如何写cover letteratmosphere-basel 是sci期刊吗温室效应 期刊论文atmosphere期刊难吗如何写cover letter写好Cover letter需要做到如下几步:1、逻辑要清晰COVER LET

2025年3月29日 22:20

table array(在Excel中vlookup函数中table_array问题)

table array(在Excel中vlookup函数中table_array问题)

本文目录在Excel中vlookup函数中table_array问题table,array,分别是什么意思vlookup函数中的table array是4个英文字母代表什么含义函数vlookuP中Table_array 为ts是什么意思ta

2025年2月25日 08:20

translational oncology(Stanford 医学院招AI相关postdoc是哪个老师)

translational oncology(Stanford 医学院招AI相关postdoc是哪个老师)

本文目录Stanford 医学院招AI相关postdoc是哪个老师translational research是什么意思Translational Oncology 影响因子是SCI收录吗translational oncology 是什么

2025年3月9日 08:50

asp编程需要什么系统要装什么软件吗?编程语言的ASP

asp编程需要什么系统要装什么软件吗?编程语言的ASP

本文目录asp编程需要什么系统要装什么软件吗编程语言的ASP怎么样用ASP 编程ASP 编程中参数传递的几种方法ASP编程和C语言哪个简单各个编程语言都有哪些“黑点”ASP.net 用什么编程软件编写比较好asp 的开发工具有那些ASP软件

2025年2月25日 22:40

oracle官网地址(oracle数据库的jdbc驱动在哪下载最好是具体的网址)

oracle官网地址(oracle数据库的jdbc驱动在哪下载最好是具体的网址)

本文目录oracle数据库的jdbc驱动在哪下载最好是具体的网址求oracle数据库下载地址好的话追加50分谢谢如何查询鉴别Oracle证书真伪和网上验证地址如何查询Oracle授权的WDP中心呐要官方授权,最好是从Oracle官方网站上能

2025年3月15日 08:20

内存溢出异常(电脑软件使用某一程序,有时会报 内存溢出错误out of memory)

内存溢出异常(电脑软件使用某一程序,有时会报 内存溢出错误out of memory)

本文目录电脑软件使用某一程序,有时会报 内存溢出错误out of memorypython如何处理内存溢出内存溢出和创建小数组的溢出异常问题,怎么解决内存溢出错误怎么解决电脑软件使用某一程序,有时会报 内存溢出错误out of memory

2025年2月16日 21:50

源码汇app下载安卓晒(汇编源码下载)

源码汇app下载安卓晒(汇编源码下载)

本文目录汇编源码下载如何破解安装软件的源代码android记账软件的汇总源码怎么实现汇编源码下载附件源码是我学习汇编语言些的源码,有详细的注释如何破解安装软件的源代码根据楼主的要求:楼主想要破解软件,建议楼主 下载IDA PRO 反汇编工具

2025年2月24日 06:20

算天数的软件(什么软件可以记录天数)

算天数的软件(什么软件可以记录天数)

本文目录什么软件可以记录天数有一种软件,它的天数会自己一天一天的加的,就是你要计算你和谁处了多长时间的,哪种软件叫什么记天数的软件是什么计算天数的软件叫什么很火记情侣天数的软件是什么什么软件可以记录天数回答1、倒数日APP倒数日是凡跃计算机

2025年3月22日 04:10

while语句循环的结构(while循环结构的语法和执行顺序是什么)

while语句循环的结构(while循环结构的语法和执行顺序是什么)

本文目录while循环结构的语法和执行顺序是什么for, while,do-while循环语句的各个特点JAVA中关于while循环的用法while循环结构的语法和执行顺序是什么语法:while(判断条件){执行语句},先判断是否满足判断条

2025年3月26日 14:20

related videos(related videos是什么意思)

related videos(related videos是什么意思)

本文目录related videos是什么意思Related Videos是什么意思JAVA的问题:给你一个数组A,数组A中有五个无序的元素,例int A[]={5,3,1,4,2}; 再给你个数组B,把数组A的致伤 名词解释 relate

2025年2月11日 19:50

表格制作教程入门视频免费(电脑上怎么制作表格视频教程)

表格制作教程入门视频免费(电脑上怎么制作表格视频教程)

本文目录电脑上怎么制作表格视频教程WPS表格制作视频教程制作表格教程基础入门+视频教程电脑上怎么制作表格视频教程回答你好 打开Excel,双击新建一个Excel表格。2、选中要新建表格的区域,单击鼠标右键,选择“设置单元格格式”。3、在弹出

2025年3月10日 05:10

近期文章

本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:18
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:6
标签列表

热门搜索