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

本文通过Java实现工厂模式,创建Mac和Win两个产品系列的具体实例,包括各自的RAM和CPU。通过抽象工厂类定义创建产品的接口,具体工厂类实现该接口来创建对应的产品。这种方式有助于理解和应用设计模式。

刚刚将四人帮的设计模式看完了,总觉得这本书写得实在难理解,痛苦之时,恰好发现了用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、付费专栏及课程。

余额充值