抽象工厂模式

简介

  抽象工厂模式在工厂模式上添加了一个创建不同工厂的抽象接口(抽象类或接口实现),该接口可叫做超级工厂。在使用过程中,我们首先通过抽象接口创建出不同的工厂对象,然后根据不同的工厂对象创建不同的对象。

具体实现

  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

 

posted @ 2020-04-29 00:59  silentteller  阅读(172)  评论(0编辑  收藏  举报