1. 程式人生 > 其它 >設計模式之 抽象工廠模式

設計模式之 抽象工廠模式

工廠模式針對單個維度進行分類,抽象工廠模式針對多個維度進行分類。

示例

(1)第1類產品介面及實現類的定義

public interface Phone{
    String call();
}

public class PhoneApple implements Phone{
    @Override
    public String call(){
        return "call somebody by apple phone";
    }
}

public class PhoneHuawei implements Phone{
    @Override
    
public String call(){ return "call somebody by huawei phone"; } }

(2)第2類產品介面及實現類的定義

public interface Computer{
    String internet();
}

public class ComputerApple implements Computer{
    @Override
    public String internet(){
        return "surf the internet by apple computer";
    }
}

public class ComputerHuawei implements Computer{ @Override public String internet(){ return "surf the internet by huawei computer"; } }

(3)工廠定義

public abstract class AbstractFactory{
    public abstract Phone createPhone(String brand);
    public abstract Computer createComputer(String brand);
}

public class PhoneFactory extends AbstractFactory{ @Override public Phone createPhone(String brand){ if("huawei".equals(brand)){ return new PhoneHuawei(); }else if("apple".equals(brand)){ return new PhoneApple(); }else{ return null; } } @Override public Computer createComputer(String brand){ return null; } } public class ComputerFactory extends AbstractFactory{ @Override public Phone createPhone(String brand){ return null; } @Override public Computer createComputer(String brand){ if("huawei".equals(brand)){ return new ComputerHuawei(); }else if("apple".equals(brand)){ return new ComputerApple(); }else{ return null; } } }

(4)使用抽象工廠

AbstractFactory phoneFactory = new PhoneFactory();
Phone phoneHuawei = phoneFactory.createPhone("huawei");
Phone phoneApple = phoneFactory.createPhone("apple");
logger.info(phoneHuawei.call());
logger.info(phoneApple.call());

AbstractFactory computerFactory = new ComputerFactory();
Computer computerHuawei = computerFactory.createComputer("huawei");
Computer computerApple = computerFactory.createComputer("apple");
logger.info(computerHuawei.internet());
logger.info(computerApple.internet());