小白都能懂的设计模式 java版 抽象工厂模式 实战练习(超详细)

作者:神秘网友 发布时间:2020-10-24 00:14:45

小白都能懂的设计模式 java版 抽象工厂模式 实战练习(超详细)

小白都能懂的设计模式 java版 抽象工厂模式 实战练习(超详细)

比如要生产华为手机,华为路由器,小米手机,小米路由器
先写路由器和手机的接口:

package abstract1;

//手机产品接口
public interface IphoneProduct {
    void start();
    void shutdown();
    void callup();
    void sendMes();
}

package abstract1;

//路由器产品接口
public interface IRouteProduct {
    void start();
    void shutdown();
    void openWifi();
    void setting();
}

再分别实现一个小米手机和小米路由器
以及华为手机华为路由器

package abstract1;

//小米手机
public class XiaomiPhone implements IphoneProduct{

    @Override
    public void start() {
        System.out.println("开启小米手机");
    }

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

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

    @Override
    public void sendMes() {
        System.out.println("小米发短信");
    }
}

package abstract1;

//小米路由器
public class XiaomiRoute implements IRouteProduct {
    @Override
    public void start() {
        System.out.println("启动小米路由器");
    }

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

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

    @Override
    public void setting() {
        System.out.println("小米设置");
    }
}

华为手机和路由器

package abstract1;

//华为手机
public class HuaweiPhone implements IphoneProduct {
    @Override
    public void start() {
        System.out.println("开启华为手机");
    }

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

    @Override
    public void callup() {
        System.out.println("华为手机打电话");
    }

    @Override
    public void sendMes() {
        System.out.println("华为手机发短信");
    }
}

package abstract1;

//华为路由器
public class HuaweiRoute implements IRouteProduct {
    @Override
    public void start() {
        System.out.println("启动华为路由器");
    }

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

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

    @Override
    public void setting() {
        System.out.println("华为设置");
    }
}

再实现一个产品工厂接口,生产手机和路由器:

package abstract1;

//抽象产品工厂
public interface IProductFactory {
    //生产手机
    IphoneProduct iphoneProduct();

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

然后再实现这个接口,
华为生产手机和路由器的工厂
小米生产手机和路由器的工厂:

package abstract1;

//华为工厂
public class HuaweiFactory implements IProductFactory {
    @Override
    public IphoneProduct iphoneProduct() {
        return new HuaweiPhone();
    }

    @Override
    public IRouteProduct routerProduct() {
        return new HuaweiRoute();
    }
}

package abstract1;

//小米工厂
public class XiaomiFactory implements IProductFactory {

    @Override
    public IphoneProduct iphoneProduct() {
        return new XiaomiPhone();
    }

    @Override
    public IRouteProduct routerProduct() {
        return new XiaomiRoute();
    }
}

最后模拟一个client去调用

package abstract1;

public class Client {
    public static void main(String[] args) {
        System.out.println("-----------小米系列产品------------");

        //小米工厂
        XiaomiFactory xiaomiFactory = new XiaomiFactory();
        IphoneProduct iphoneProduct = xiaomiFactory.iphoneProduct();
        iphoneProduct.callup();
        iphoneProduct.shutdown();

        IRouteProduct iRouteProduct = xiaomiFactory.routerProduct();
        iRouteProduct.openWifi();
        iRouteProduct.setting();

        System.out.println("-----------华为系列产品------------");

        //华为工厂
        HuaweiFactory huaweiFactory = new HuaweiFactory();
        iphoneProduct = huaweiFactory.iphoneProduct();
        iphoneProduct.callup();
        iphoneProduct.shutdown();

        iRouteProduct = huaweiFactory.routerProduct();
        iRouteProduct.openWifi();
        iRouteProduct.setting();
    }
}

小白都能懂的设计模式 java版 抽象工厂模式 实战练习(超详细)
所以抽象工厂就是抽象的抽象

好了,今天就先到这里

小白都能懂的设计模式 java版 抽象工厂模式 实战练习(超详细)相关教程

  1. (小白)MySQL基础学习006 20201022

    (小白)MySQL基础学习006 20201022 (小白)MySQL基础学习006 20201022 自定义函数 用户自定义,由多条语句组成 矛盾:mysql在遇到分号(;)会自动执行,但自定义函数内多条语句间的间隔又需要分号,解决方法: 修改临时语句结束符 delimiter delimiter 新符

  2. sklearn 小白抱佛脚笔记4: 无监督学习

    sklearn 小白抱佛脚笔记4: 无监督学习 Unsupervised learning: seeking representations of the data 类聚: k-means 类聚 Hierarchical agglomerative clustering: Ward 分层类聚算法(HAC): Ward 1. 聚集思路: 同类的尽量聚集在一块 2. 分隔思路: 不同类尽量

  3. Kubernetes 小白学习笔记(19)--高可用kubernetes集群

    Kubernetes 小白学习笔记(19)--高可用kubernetes集群 config.json { CN: $HOSTNAME, hosts: [ $HOSTNAME, PRIVATE_IP ], key: { algo: ecdsa, size: 256 }, names: [ { C: US, ST: CA, L: San Francisco } ]} 本章涉及到的cfssl命令:cfssl gencert -ca=ca.

  4. Vue2.x/Vue3.x跨域问题小白教程

    Vue2.x/Vue3.x跨域问题小白教程 Vue2.x/Vue3.x跨域问题小白教程 跨域原因 Vue2.x版本跨域问题解决 proxyTable原理 发送请求页面 安装axios Vue3.x跨域问题解决 发送请求页面 跨域原因 一个网站的js代码段去访问另一个网站时,由于安全原因,跨域访问是被各大

  5. 教你进阶3D次世代角色高手从小白学成大神

    教你进阶3D次世代角色高手,从小白学成大神? 一个新人想要从零基础成为次世代游戏设计师需要经历这些 1. 美术基础和软件基础的学习阶段 想成为次世代游戏设计师,倘若没有美术基础和软件基础,那面对的困难可不是一点点。所以想要入门,首先就是要掌握软件

  6. C# Winform 主窗口最小化隐藏至系统托盘中(适合小白)

    C# Winform 主窗口最小化隐藏至系统托盘中(适合小白) 前言 和大家分享 一个如何将我们的程序隐藏到系统托盘中的小Demo,非常实用适合小白上手,话多说上项目。 项目 1. 打开Visual Studio 2017,新建一个Winform项目,命名为 MissionBoardData。 2. 打开新建

  7. 小白练习篇之使用rsync+inotify实现/www目录实时同步

    小白练习篇之使用rsync+inotify实现/www目录实时同步 实验环境: rsync服务器是192.168.6.129,客户机上192.168.6.130 1.在192.168.6.129服务器上安装inotify-tools [[emailprotected] /]# yum install inotify-tools -y 备注:inotify是内核的一个功能,我们

  8. 小白如何选择一款好用的音乐编曲软件看这里

    小白如何选择一款好用的音乐编曲软件,看这里 对很多音乐爱好者而言,从单独的欣赏作品,过渡到按自己的心情创作作品,是一段奇妙又欣喜的体验。而音乐编曲,尤其是电音编曲,Daw(宿主软件)是一个很重要的元素。 编曲软件很多,但实际上,不同的软件有着不