設計模式之 抽象工廠模式
阿新 • • 發佈:2021-09-03
工廠模式針對單個維度進行分類,抽象工廠模式針對多個維度進行分類。
示例
(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{ @Overridepublic 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());