刚刚将四人帮的设计模式看完了,总觉得这本书写得实在难理解,痛苦之时,恰好发现了用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());   */        } }   
   
 
  |