设计模式——抽象工厂模式

148 阅读2分钟

抽象工厂模式属于创建型模式。

所谓抽象工厂也就是创建工厂的工厂,这里以创建华为手机、华为路由器、小米手机和小米路由器为例,来进行讲解。

华为手机和小米手机都属于手机产品,这里先定义一个手机产品接口

//手机产品的接口
public interface PhoneProduct {
    public void start();
    public void shutdown();
    public void call();
}

华为路由器和手机路由器都属于路由器产品,同样定义一个路由器的接口

//路由器接口
public interface RouterProduct {
    public void start();
    public void shutdown();
    public void openWifi();
}

不管是华为手机还是小米手机都属于手机产品,所以定义连个手机类都实现手机接口

public class HuaWeiPhone implements PhoneProduct {
    @Override
    public void start() {
        System.out.println("华为手机开机");
    }

    @Override
    public void shutdown() {
        System.out.println("华为手机关机");
    }

    @Override
    public void call() {
        System.out.println("华为手机打电话");
    }
}
public class XiaoMiPhone implements PhoneProduct {
    @Override
    public void start() {
        System.out.println("小米手机开机");
    }

    @Override
    public void shutdown() {
        System.out.println("小米手机关机");
    }

    @Override
    public void call() {
        System.out.println("小米手机打电话");
    }
}

同样的对华为路由器和小米路由器也都实现路由器的接口

public class HuaWeiRouter implements RouterProduct {
    @Override
    public void start() {
        System.out.println("华为路由开机");
    }

    @Override
    public void shutdown() {
        System.out.println("华为路由关机");
    }

    @Override
    public void openWifi() {
        System.out.println("华为路由打开Wifi");
    }
}

 

public class XiaoMiRouter implements RouterProduct {
    @Override
    public void start() {
        System.out.println("小米路由开机");
    }

    @Override
    public void shutdown() {
        System.out.println("小米路由关机");
    }

    @Override
    public void openWifi() {
        System.out.println("小米路由打开Wifi");
    }
}

不管是手机产品还是路由器产品,都属于产品,这里定义一个产品工厂接口

//抽象产品工厂
public interface ProductFactory {
    //生产手机
    PhoneProduct phoneProduct();

    //生产路由器
    RouterProduct routerProduct();
}

不管是华为手机还是华为路由器,都属于华为工厂的产品

public class HuaWeiFactory implements ProductFactory {
    @Override
    public PhoneProduct phoneProduct() {
        return new HuaWeiPhone();
    }

    @Override
    public RouterProduct routerProduct() {
        return new HuaWeiRouter();
    }
}

同样的,小米手机和小米路由器也是小米工厂的产品

public class XiaoMiFactory implements ProductFactory {
    @Override
    public PhoneProduct phoneProduct() {
        return new XiaoMiPhone();
    }

    @Override
    public RouterProduct routerProduct() {
        return new XiaoMiRouter();
    }
}

开始测试:

public class Main {
    public static void main(String[] args) {
        System.out.println("-----------小米产品-----------");
        XiaoMiFactory xiaoMiFactory = new XiaoMiFactory();
        PhoneProduct phoneProduct = xiaoMiFactory.phoneProduct();
        phoneProduct.start();
        phoneProduct.call();

        RouterProduct routerProduct = xiaoMiFactory.routerProduct();
        routerProduct.start();
        routerProduct.openWifi();

        System.out.println("-----------华为产品-----------");
        HuaWeiFactory huaWeiFactory = new HuaWeiFactory();
        PhoneProduct phoneProduct1 = huaWeiFactory.phoneProduct();
        phoneProduct1.start();
        phoneProduct1.call();

        RouterProduct routerProduct1 = huaWeiFactory.routerProduct();
        routerProduct1.start();
        routerProduct1.openWifi();
    }
}

运行结果: