用Java實現的設計模式系列(1)-Factory (轉)

worldblog發表於2007-12-13
用Java實現的設計模式系列(1)-Factory (轉)[@more@]

  剛剛將四人幫的設計看完了,總覺得這本書寫得實在難理解,痛苦之時,恰好發現了用來理解設計模式原來是一種最好的方式,可是苦於網上現在只有C++的設計模式實現原始碼,而卻沒有一份完整的Java實現的設計模式原始碼。小弟不才,希望藉此篇文章,讓大蝦們共同努力,整理出一份較為完整且容易理解的用Java實現的設計模式原始碼!

  另:CSDN上有沒有一個原始碼的地方,希望最後能將所有原始碼彙總,並打包以提供給各位蟲蟲們。

/**
 * Design Pattern In Java
 * Name:Factory
 * 目的:利用工廠模式建立兩個產品系列Mac和Win
 * Mac:MacRam,Mac
 * 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());
 */
 
 }
}
 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992872/,如需轉載,請註明出處,否則將追究法律責任。

相關文章