1. 程式人生 > >設計模式(四)——抽象工廠模式

設計模式(四)——抽象工廠模式

前面說了兩種設計模式,簡單工廠模式和工廠模式。簡單工廠模式是定義一個工廠類,工廠類根據呼叫時傳入的引數選擇建立哪一個類的例項。工廠模式是為每個類建立一個工廠,而這些工廠都實現了同一個工廠,客戶端在呼叫的時候自己選擇某個類對應的工廠去建立某個類的例項。那抽象工廠又是什麼呢?抽象工廠在工廠模式的基礎上引入了“產品族”的概念。

程式碼如下(滑鼠和鍵盤是一個產品族):

先定義滑鼠介面和鍵盤介面:

package AbstractFactoryPattern;
/**
 * 滑鼠
 */
public interface Mouse {
    
    //滑鼠點選
    public void click();
    
}


package AbstractFactoryPattern;
/**
 * 鍵盤
 */
public interface KeyBoard {
    
    //鍵盤點選
    public void click();
    
}

定義戴爾滑鼠和鍵盤:

package AbstractFactoryPattern;

/**
 * 戴爾滑鼠
 */
public class DellMouse implements Mouse{

    @Override
    public void click() {
        // TODO Auto-generated method stub
        System.out.println("click DellMouse ...");
    }

}


package AbstractFactoryPattern;
/**
 * 戴爾鍵盤
 */
public class DellKeyBoard implements KeyBoard{

    @Override
    public void click() {
        // TODO Auto-generated method stub
        System.out.println("click DellKeyBoard ...");
    }

}

定義惠普滑鼠和鍵盤:

package AbstractFactoryPattern;

/**
 * 惠普滑鼠
 */
public class HPMouse implements Mouse{

    @Override
    public void click() {
        // TODO Auto-generated method stub
        System.out.println("click HPMouse ...");
    }

}


package AbstractFactoryPattern;
/**
 * 惠普鍵盤
 */
public class HPKeyBoard implements KeyBoard{

    @Override
    public void click() {
        // TODO Auto-generated method stub
        System.out.println("click HPKeyBoard ...");
    }

}

定義抽象工廠:

package AbstractFactoryPattern;

public abstract class Factory {

    //生產滑鼠
    public abstract Mouse createMouse();
    
    //生產鍵盤
    public abstract KeyBoard createKeyBoard();
    
}

定義惠普工廠和戴爾工廠:

package AbstractFactoryPattern;
/**
 * 惠普工廠
 */
public class HPFactory extends Factory{

    @Override
    public Mouse createMouse() {
        // TODO Auto-generated method stub
        return new HPMouse();
    }

    @Override
    public KeyBoard createKeyBoard() {
        // TODO Auto-generated method stub
        return new HPKeyBoard();
    }

}

package AbstractFactoryPattern;
/**
 * 戴爾工廠
 */
public class DellFactory extends Factory{

    @Override
    public Mouse createMouse() {
        // TODO Auto-generated method stub
        return new DellMouse();
    }

    @Override
    public KeyBoard createKeyBoard() {
        // TODO Auto-generated method stub
        return new DellKeyBoard();
    }

}

執行測試類:

package AbstractFactoryPattern;

public class RunDemp {
    
    public static void main(String[] args) {
        
        Factory hpFactory = new HPFactory();
        Mouse hpMouse = hpFactory.createMouse();
        hpMouse.click();
        KeyBoard hpKeyBoard = hpFactory.createKeyBoard();
        hpKeyBoard.click();
        
    }
    
}

執行結果:

參考文件:設計模式|菜鳥教程,《設計模式之禪》