用Java实现的设计模式-Factory

本文介绍了一种使用Java实现工厂模式的方法,通过创建不同系列的产品(如Mac和Win),展示了如何利用工厂模式简化对象创建过程。文章提供了具体的代码示例,包括抽象产品类、具体产品类及抽象工厂和具体工厂的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 刚刚将四人帮的设计模式看完了,总觉得这本书写得实在难理解,痛苦之时,恰好发现了用Java来理解设计模式原来是一种最好的方式,可是苦于网上现在只有C 的设计模式实现源码,而却没有一份完整的Java实现的设计模式源码。小弟不才,希望借此篇文章,让大虾们共同努力,整理出一份较为完整且容易理解的用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()); */ } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值