java設計模式之抽象原廠模式執行個體

來源:互聯網
上載者:User


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";
    }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.