package com.yq1012.建立型模式.Factory 方法.抽象工廠;
public class AMD implements CPU{
public String getCPU(){
return "Athlon XP 2008+";
}
}
package com.yq1012.建立型模式.Factory 方法.抽象工廠;
public abstract class ComputerFactory{
CPU cpu;
HardDisk hd;
MainBoard mb;
public void show(){
try{
System.out.println(this.getClass().getName() .toString () + ("生產的電腦配置"));
System.out.println ("CPU:" + cpu.getCPU ());
System.out.println ("HardDisk:"+ hd.getSize ());
System.out.print ("MainBoard:");
mb.Attach(cpu);
}
catch(Exception e){
System.err.println(e.getMessage());
}
}
}
package com.yq1012.建立型模式.Factory 方法.抽象工廠;
public interface CPU{
public String getCPU();
}
package com.yq1012.建立型模式.Factory 方法.抽象工廠;
public class DellFactory extends ComputerFactory{
DellFactory(){
cpu = new AMD();
hd = new Maxtor();
mb = new MSIK7N2G();
}
}
package com.yq1012.建立型模式.Factory 方法.抽象工廠;
public interface HardDisk{
public String getSize();
}
package com.yq1012.建立型模式.Factory 方法.抽象工廠;
public class IBMFactory extends ComputerFactory{
IBMFactory(){
cpu = new Intel();
hd = new WestDigit();
mb = new MSI865PE();
}
}
package com.yq1012.建立型模式.Factory 方法.抽象工廠;
public class Intel implements CPU{
public String getCPU(){
return "奔騰4 3.2C";
}
}
package com.yq1012.建立型模式.Factory 方法.抽象工廠;
public interface MainBoard{
public void Attach(CPU cpu) throws Exception;
}
package com.yq1012.建立型模式.Factory 方法.抽象工廠;
public class Maxtor implements HardDisk{
public String getSize(){
return "MaXLine Plus II 200G";
}
}
package com.yq1012.建立型模式.Factory 方法.抽象工廠;
//主板微星MSI865PE,支援Intel的CPU:
public class MSI865PE implements MainBoard{
public void Attach(CPU cpu) throws Exception{
if(cpu.getClass ().toString ().endsWith("Intel")){
System.out.println("MSI865PE");
}
else{
throw new Exception("主板MSI865PE只能配Intel的 CPU");
}
}
}
package com.yq1012.建立型模式.Factory 方法.抽象工廠;
public class MSIK7N2G implements MainBoard{
public void Attach(CPU cpu) throws Exception{
if(cpu.getClass ().toString ().endsWith("AMD")){
System.out.println("MSIK7N2G");
}
else{
throw new Exception("主板MSIK7N2G只能配AMD的CPU");
}
}
}
package com.yq1012.建立型模式.Factory 方法.抽象工廠;
public class Test {
public static void main(String[] args) {
// 抽象原廠模式:提供一個建立一系列相關或相互依賴對象的介面,而無需指定它們具體的類。
// 舉一個電腦產品的例子吧:
// IBM,Dell都是著名的電腦生產廠家,他們採用的主板、硬碟及CPU是不相同的,
// 但是配件間、主板與CPU一定要相互相容,例如下面例子中的微星MSIK7N2G配AMD的CPU;微星MSI865PE配Intel的CPU。
// 如圖中所示,ComputerFactory是抽象工廠,Dell和IBM是生產產品的工廠
// ;CPU、HardDisk、MainBoard是抽象產品,CPU的型號又分許多種。具體實現見代碼:
//
IBMFactory ibm = new IBMFactory();
ibm.show();
DellFactory dellFactory = new DellFactory();
dellFactory.show();
}
// 抽象原廠模式:前面Factory 方法模式是比較具體的,是貓肯定生的是小貓,這是不會有問題的
// ,是具體的,那麼抽象工廠它所產生的就不是那麼具體,產生的對象可能是沒有共同特性的。
// 譬如說 一隻奶羊不僅僅能夠生小羊,同時也能生產羊奶,但小羊是動物,羊奶是食物。
}
package com.yq1012.建立型模式.Factory 方法.抽象工廠;
public class WestDigit implements HardDisk{
public String getSize(){
return "WD2500JD 250G";
}
}