当前位置: 首页 > article >正文

设计模式篇--抽象工厂模式

/**
 * 主要思路:先构建一个总工厂,包含许多分工厂,再从分工厂中,取出自己想要的类型的物品
 */
public class main {
    public static void main(String[] args) {
        FactoryProducer factoryProducer = new FactoryProducer();
        //获取手机工厂
        AbstractFactory phoneFactory = factoryProducer.getFactory("Phone");
        //获取路由器工厂
        AbstractFactory routerFactory = factoryProducer.getFactory("Router");
        //手机工厂创建对应的手机
        phoneFactory.createPhone("xiaomi");
        //路由器工厂创建对应路由器
        routerFactory.createRouter("xiaomi");
    }
}

//生产手机的接口

public interface Phone { void call(); void hangup(); void sendSMS(); }

不同厂商的手机

public class huaweiPhone implements Phone {
    @Override
    public void call() {
        System.out.println("huaweiPhone call");
    }

    @Override
    public void hangup() {
        System.out.println("huaweiPhone playGame");
    }

    @Override
    public void sendSMS() {
        System.out.println("huaweiPhone sendMsg");
    }
}
public class xiaomiPhone implements Phone {
    @Override
    public void call() {
        System.out.println("xiaomiPhone call");
    }

    @Override
    public void sendSMS() {
        System.out.println("xiaomiPhone sendMsg");
    }

    @Override
    public void hangup() {
        System.out.println("xiaomiPhone playGame");
    }
}
//创建手机的工厂
public class PhoneFactoryImpl implements AbstractFactory {
    @Override
    public Phone createPhone(String phoneType) {
        if("huawei".equals(phoneType)){
            return new huaweiPhone();
        }else if("xiaomi".equals(phoneType)) {
            return new xiaomiPhone();
        }
        return null;
    }

    @Override
    public Router createRouter(String routerType) {
        return null;
    }
}

//路由器接口

public interface Router { void on(); void off(); void onWifi(); void offWifi(); }

//不同厂商路由器
public class huaweiRouter implements Router {
    public void on() {
        System.out.println("huaweiRouter on");
    }

    public void off() {
        System.out.println("huaweiRouter off");
    }

    public void onWifi() {
        System.out.println("huaweiRouter onWifi");
    }

    public void offWifi() {
        System.out.println("huaweiRouter offWifi");
    }
}
public class xiaomiRouter implements Router {
    @Override
    public void on() {
        System.out.println("xiaomiRouter on");
    }

    @Override
    public void off() {
        System.out.println("xiaomiRouter off");
    }

    @Override
    public void onWifi() {
        System.out.println("xiaomiRouter onWifi");
    }

    @Override
    public void offWifi() {
        System.out.println("xiaomiRouter offWifi");
    }
}
//创建路由器工厂
public class RouterFactoryImpl implements AbstractFactory {

    @Override
    public Phone createPhone(String phoneType) {
        return null;
    }

    @Override
    public Router createRouter(String routerType) {
        if("xiaomi".equals(routerType)){
            return new xiaomiRouter();
        } else if ("huawei".equals(routerType)) {
            return new huaweiRouter();
        }
        return null;
    }
}
//工厂生产者
public class FactoryProducer {
    public static AbstractFactory getFactory(String factory) {
        if (factory.equalsIgnoreCase("Phone")) {
            return new PhoneFactoryImpl();
        } else if (factory.equalsIgnoreCase("Router")) {
            return new RouterFactoryImpl();
        }
        return null;
    }
}


http://www.kler.cn/a/303498.html

相关文章:

  • 我的第一个PyQt5程序
  • 基于Matlab的碎纸片的自动拼接复原技术
  • 源码解析-Spring Eureka(更新ing)
  • ES6更新的内容中什么是proxy
  • Day 65 || SPFA、判断负权回路、bellman_ford之单源有限最短路
  • 浅谈React的虚拟DOM
  • Vue - 详细介绍vue-qr在线生成二维码组件(Vue2 Vue3)
  • 为 WebSocket 配置 Nginx 反向代理来支持 Uvicorn 的最佳实践
  • 动手学习RAG: moka-ai/m3e 模型微调deepspeed与对比学习
  • 苍穹外卖随记(一)
  • YOLOV8实现小目标检测
  • Qt自动打开文件夹并高亮文件
  • CI/CD持续集成和持续部署以及相关软件的使用
  • Docker日志管理之Filebeat+ELK日志管理
  • (不用互三)解密AI创作:提升Prompt提示词的提问技巧
  • VS Code 中提升编程效率的功能及使用方法
  • 大模型-模型架构-详细配置
  • 雷电9模拟器安装magisk和lsposed
  • 负载均衡:从理论到实践 ---day04
  • http连接与ssh连接的区别
  • 华为HCIA、HCIP和HCIE认证考试明细
  • 实现一个点缓慢到达另一个点
  • 【网络】传输层协议UDP
  • Kubernetes 集群管理
  • 音视频入门基础:AAC专题(1)——AAC官方文档下载
  • 【JVM】判断对象能否回收的两种方法:引用计数算法,可达性分析算法