简介
抽象工厂模式在工厂模式上添加了一个创建不同工厂的抽象接口(抽象类或接口实现),该接口可叫做超级工厂。在使用过程中,我们首先通过抽象接口创建出不同的工厂对象,然后根据不同的工厂对象创建不同的对象。
具体实现
1.抽象工厂定义如下
public abstract class AbstractFactory { public abstract Phone createPhone(String brand); public abstract Computer createComputer(String brand); }
抽象类AbstractFactory,是抽象工厂的核心类,它定义了两个方法,分别返回手机和电脑。
2.手机接口及其实现类
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"; } }
3.电脑接口及其实现类
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"; } }
4手机工厂类定义如下
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; } }
5.电脑工厂类定义如下
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; } }
6使用抽象工厂模式
public class Test { public static void main(String[] args) { AbstractFactory phoneFactory = new PhoneFactory(); Phone phoneHuawei = phoneFactory.createPhone("HuaWei"); Phone phoneApple = phoneFactory.createPhone("Apple"); System.out.println(phoneApple.call()); System.out.println(phoneHuawei.call()); AbstractFactory computerFactory = new ComputerFactory(); Computer computerHuawei = computerFactory.createComputer("HuaWei"); Computer computerApple = computerFactory.createComputer("Apple"); System.out.println(computerApple.internet()); System.out.println(computerHuawei.internet()); } }
结果
call somebody by apple phone
call somebody by huawei phone
surf the internet by apple computer
surf the internet by huawei computer