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

news2024/9/20 1:40:53

/**
 * 主要思路:先构建一个总工厂,包含许多分工厂,再从分工厂中,取出自己想要的类型的物品
 */
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.coloradmin.cn/o/2135008.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络(六) —— http协议详解

目录 一,预备知识 1.1 关于域名 1.2 关于URL 1.3 urlencode和urldecode 二,关于http 2.1 什么是http 2.2 http协议格式 2.2.1 网络协议栈 2.2.2 http请求协议格式* 2.2.3 http响应协议格式* 三,http细节字段 3.1 http方法 3.2 …

《A++ 敏捷开发》- 26 根与翼

中国社会一直非常强调家庭价值观,希望实现家族的持续传承,家族有族谱,代代相传的关系对每个家庭成员的成长产生深远影响。我们每个人都只是人类进化过程中的短暂过渡。父母普遍希望把最好的东西传承给下一代。然而我们需要问自己,…

【Go】Go语言中延迟函数、函数数据的类型、匿名函数、闭包等高阶函数用法与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

每日处理250亿个事件,Canva如何应对数据洪流

在这个数据被称为“新石油”的时代,如何有效地处理海量信息流显得尤为重要。作为广受欢迎的设计平台,Canva不仅因其用户友好的界面而备受关注,还因其高效利用Amazon Kinesis管理每日高达250亿个事件而成为热议焦点。让我们深入探讨Canva是如何…

【案例70】invalid secrity token(null)

问题现象 系统登录时提示invalid secrity token(null) 问题分析 排查发现令牌种子没有配置或被人为修改 解决方案 1、登录环境。代码路径下bin下有个sysconfig.bat。左侧选“系统配置”。右侧点“安全”。读取保存一下。 2、或者找一个好用的环境。把ierp/bin下的prop.xml文…

Redis简介、常用命令及优化

文章目录 一、关系数据库​​与非关系型数据库概述1. 关系型数据库2. 非关系型数据库3.关系数据库与非关系型数据库区别 二、Redis简介1.Redis的单线程模式2.Redis 优点3.Redis 缺点 三、安装redis四、Redis 命令工具五、Redis 数据库常用命令六、Redis 多数据库常用命令七、Re…

【算法专题--回文】最长回文子串 -- 高频面试题(图文详解,小白一看就懂!!)

目录 一、前言 二、题目描述 三、预备知识 🥝 什么回文串 ? 四、题目解析 五、总结与提炼 六、共勉 一、前言 最长回文子串 这道题,可以说是--回文专题 --,最经典的一道题,也是在面试中频率最高…

哈希表和双向链表实现LRU

LRU(Least Recently Used)即最近最少使用,是一种内存管理算法。最近在Linux的缓冲区管理也看到了使用LRU算法,即利用哈希表进行 O(1) 复杂度的快速查找,利用双向链表(里面的元素是缓冲头)对缓冲…

再次进阶 舞台王者 第八季完美童模全球赛代言人【吴浩美】赛场+秀场超燃合集

7月20-23日,2024第八季完美童模全球总决赛在青岛圆满落幕。在盛大的颁奖典礼上,一位才能出众的少女——吴浩美迎来了她舞台生涯的璀璨时刻。 代言人——吴浩美,以璀璨童星之姿,优雅地踏上完美童模盛宴的绚丽舞台,作为开…

【趣学Python算法100例】兔子产子

问题描述 有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总对数为多少? 题目解析 兔子产子问题是一个有趣的古典数学问题&#xff0c…

Office关闭安全提示

每次启动都要提示这个,怎么关?

大数据-135 - ClickHouse 集群 - 数据类型 实际测试

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

Nuxt Kit 自动导入功能:高效管理你的模块和组合式函数

title: Nuxt Kit 自动导入功能:高效管理你的模块和组合式函数 date: 2024/9/14 updated: 2024/9/14 author: cmdragon excerpt: 通过使用 Nuxt Kit 的自动导入功能,您可以更高效地管理和使用公共函数、组合式函数和 Vue API。无论是单个导入、目录导入还是从第三方模块导入…

GMB外链是什么?

GMB外链其实就是百万外链,它是一种通过大量反向链接来提升网站页面权重的方法。如果你刚建了一个新网站,想在短时间内被收录并获得排名,GMB外链能帮你做到这点。它不像传统SEO那样需要等待好几个月的效果,GMB外链能在24小时内帮你…

vector(2)

前言 通过上一节的学习,我们知道了vector中可以存放各种类型的数据,这就意味着vector之中不仅仅可以存放int、char等内置类型,还可以存放vector和string等类型,我们结合底层的具体情况来具体分析 vector的复用(套娃&a…

光控资本:股票增发是什么意思?股票增发的形式?

股票增发配售是已上市的公司通过指定投资者(如大股东或组织投资者)或全部投资者额定发行股份搜集资金的融资办法。 留意:股票增发后,股价会除权下降。由于增发后股本扩大了,那么每股收益与每股净资产均下降&#xff0…

今天一次讲明白C++条件变量

在C中,std::condition_variable 条件变量是一个同步原语,它允许一个或多个线程在某个条件成立时,被另一个线程唤醒。std::condition_variable 条件变量通常与互斥锁(std::mutex)一起使用,以保护共享数据和同…

David Baker 任科学顾问,初创公司发布世界最大蛋白质相互作用数据库,已获 8 轮融资

蛋白质-蛋白质相互作用 (Protein-Protein Interactions, PPI) 是细胞生命活动的重要组成部分,在调控和维持细胞的生理功能中(如细胞的信号传导、代谢反应和基因表达)发挥着不可或缺的作用。 然而目前 PPl 数据库中的数据相对较少&#xff0c…

穿越病毒区-第15届蓝桥省赛Scratch中级组真题第2题

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第187讲。 如果想持续关注Scratch蓝桥真题解读,可以点击《Scratch蓝桥杯历年真题》并订阅合集,…

CCF201912_1

题解&#xff1a; #include<bits/stdc.h>using namespace std;int n;bool shouldSkip(int num) {if (num % 7 0){return true;}while (num > 0){if (num % 10 7){return true;}num / 10;}return false; } int main() {scanf("%d", &n);int b[4] { 0…