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()); */ } }
更多文章:

row是什么意思翻译(英语Row.Knees,ribs,knees怎么翻译)
2025年2月20日 07:50

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

androidlistview(android 中listview是怎么用的)
2025年4月3日 10:30

attribute的意思(attribute是什么意思及反义词)
2025年2月10日 11:50

flex教程(flex2中文云端怎么用/flex2中文云端源/flex2中文云端源使用图文教程)
2025年3月18日 17:00

table array(在Excel中vlookup函数中table_array问题)
2025年2月25日 08:20

translational oncology(Stanford 医学院招AI相关postdoc是哪个老师)
2025年3月9日 08:50

oracle官网地址(oracle数据库的jdbc驱动在哪下载最好是具体的网址)
2025年3月15日 08:20

内存溢出异常(电脑软件使用某一程序,有时会报 内存溢出错误out of memory)
2025年2月16日 21:50

while语句循环的结构(while循环结构的语法和执行顺序是什么)
2025年3月26日 14:20

related videos(related videos是什么意思)
2025年2月11日 19:50