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

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

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

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

//手机产品的接口
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();
    }
}

运行结果:

相关推荐
<p> 课程演示环境:Windows10  </p> <p> 需要学习<span>Ubuntus</span>系统<span>YOLOv4-tiny</span>的同学请前往《<span>YOLOv4-tiny</span>目标检测实战:训练自己的数据集》 <span></span> </p> <p> <span> </span> </p> <p> <span style="color:#E53333;">YOLOv4-tiny</span><span style="color:#E53333;">来了!速度大幅提升!</span><span></span> </p> <p> <span> </span> </p> <p> <span>YOLOv4-tiny</span>在<span>COCO</span>上的性能可达到:<span>40.2% AP50, 371 FPS (GTX 1080 Ti)</span>。相较于<span>YOLOv3-tiny</span>,<span>AP</span>和<span>FPS</span>的性能有巨大提升。并且,<span>YOLOv4-tiny</span>的权重文件只有<span>23MB</span>,适合在移动端、嵌入式设备、边缘计算设备上部署。<span></span> </p> <p> <span> </span> </p> <p> 本课程将手把手地教大家使用<span>labelImg</span>标注和使用<span>YOLOv4-tiny</span>训练自己的数据集。课程实战分为两个项目:单目标检测(足球目标检测)和多目标检测(足球和梅西同时检测)。<span></span> </p> <p> <span> </span> </p> <p> 本课程的<span>YOLOv4-tiny</span>使用<span>AlexAB/darknet</span>,在<span>Windows10</span>系统上做项目演示。包括:<span>YOLOv4-tiny</span>的网络结构、安装<span>YOLOv4-tiny</span>、标注自己的数据集、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计<span>(mAP</span>计算<span>)</span>和先验框聚类分析。 <span> </span> </p> <p> <span> </span> </p> <p> 除本课程《<span>Windows</span>版<span>YOLOv4-tiny</span>目标检测实战:训练自己的数据集》外,本人推出了有关<span>YOLOv4</span>目标检测的系列课程。请持续关注该系列的其它视频课程,包括:<span></span> </p> <p> 《<span>Windows</span>版<span>YOLOv4</span>目标检测实战:训练自己的数据集》<span></span> </p> <p> 《<span>Windows</span>版<span>YOLOv4</span>目标检测实战:人脸口罩佩戴识别》<span></span> </p> <p> 《<span>Windows</span>版<span>YOLOv4</span>目标检测实战:中国交通标志识别》<span></span> </p> <p> 《<span>Windows</span>版<span>YOLOv4</span>目标检测:原理与源码解析》<span></span> </p> <p> <span> <img alt="" src="https://img-bss.csdnimg.cn/202007061503586145.jpg" /></span> </p> <p> <span><img alt="" src="https://img-bss.csdnimg.cn/202007061504169339.jpg" /><br /> </span> </p>
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页