用Java实现的设计模式系列(1)-Factory

原创 2002年08月17日 22:52:00

     刚刚将四人帮的设计模式看完了,总觉得这本书写得实在难理解,痛苦之时,恰好发现了用Java来理解设计模式原来是一种最好的方式,可是苦于网上现在只有C++的设计模式实现源码,而却没有一份完整的Java实现的设计模式源码。小弟不才,希望借此篇文章,让大虾们共同努力,整理出一份较为完整且容易理解的用Java实现的设计模式源码!

    另:CSDN上有没有一个上传源码的地方,希望最后能将所有源码汇总,并打包以提供给各位虫虫们下载。

/**
 * 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设计模式之工厂方法模式【Factory Method Pattern】

工厂方法模式(FACTORY METHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的...
  • Lixuanshengchao
  • Lixuanshengchao
  • 2016年05月04日 21:27
  • 964

深入浅出设计模式 ------ Abstract Factory(抽象工厂)

本文可以和笔者的深入浅出设计模式 ------ Factory Method(工厂方法)参照着看, 可以区分这三个工厂模式的不同。...
  • wenniuwuren
  • wenniuwuren
  • 2015年01月29日 02:25
  • 1726

boost::factory实现对象工厂设计模式

转载自:http://blog.csdn.net/mpforwd/article/details/5791699 #ifndef MP_OBJECT_FACTORY_H #define MP_...
  • yahohi
  • yahohi
  • 2017年08月31日 16:55
  • 454

【java设计模式】之 抽象工厂(Abstract Factory)模式

1. 女娲的失误         上一节学习了工厂模式,女娲运用了该模式成功创建了三个人种,可是问题来了,她发现没有性别……这失误也忒大了点吧……竟然没有性别,那岂不是……无奈,只好抹掉重来了,于是所...
  • eson_15
  • eson_15
  • 2016年04月26日 23:49
  • 11614

设计模式——抽象工厂模式(Abstract Factory)

要想正确的理解设计模式,首先必须明确它是为了解决什么问题而提出来的。 抽象设计模式概念:         针对抽象工厂这个设计模式,我查找了不少资料,感觉只有涉及产品级别和产品族的才是理解了抽象工厂设...
  • u012909091
  • u012909091
  • 2014年08月02日 16:52
  • 3596

boost库与设计模式

设计模式针对面向对象系统中重复出现的设计问题,提出了一个通用的设计方案,并予以系统化的命名和动机解释。 它描述了问题,解决方案,在什么条件下使用该解决方案极其效果。 设计模式有助于软件开发者更好更...
  • lxmhuendan
  • lxmhuendan
  • 2014年10月13日 15:43
  • 1795

java-selenium自动化测试page object、pageFactory 设计模式

selenium目前比较流行的设计模式就是page object,那么到底什么是page object呢,简单来说,就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好...
  • a5650892
  • a5650892
  • 2017年11月19日 22:28
  • 258

图解Java多线程设计模式

图解Java多线程设计模式
  • dgutliangxuan
  • dgutliangxuan
  • 2017年09月12日 16:18
  • 1065

设计模式-资源工厂(Resource Factory) - 对象创建型

资源工厂(Resource Factory)- 对象创建型 设计模式   资源工厂 (Resource Factory) v1.0     资源工厂(Resource Factory...
  • wjian0301
  • wjian0301
  • 2004年07月06日 19:30
  • 2084

研磨设计模式 之 装饰模式(Decorator)1——跟着cc学设计系列

22.1  场景问题 22.1.1  复杂的奖金计算        考虑这样一个实际应用:就是如何实现灵活的奖金计算。 奖金计算是相对复杂的功能,尤其是对于业务部门的奖金计算方式,是非常复杂的,...
  • u013019926
  • u013019926
  • 2013年12月05日 10:10
  • 676
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用Java实现的设计模式系列(1)-Factory
举报原因:
原因补充:

(最多只允许输入30个字)