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

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

/*** 主要思路:先构建一个总工厂,包含许多分工厂,再从分工厂中,取出自己想要的类型的物品*/
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 {@Overridepublic void call() {System.out.println("huaweiPhone call");}@Overridepublic void hangup() {System.out.println("huaweiPhone playGame");}@Overridepublic void sendSMS() {System.out.println("huaweiPhone sendMsg");}
}
public class xiaomiPhone implements Phone {@Overridepublic void call() {System.out.println("xiaomiPhone call");}@Overridepublic void sendSMS() {System.out.println("xiaomiPhone sendMsg");}@Overridepublic void hangup() {System.out.println("xiaomiPhone playGame");}
}
//创建手机的工厂
public class PhoneFactoryImpl implements AbstractFactory {@Overridepublic Phone createPhone(String phoneType) {if("huawei".equals(phoneType)){return new huaweiPhone();}else if("xiaomi".equals(phoneType)) {return new xiaomiPhone();}return null;}@Overridepublic 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 {@Overridepublic void on() {System.out.println("xiaomiRouter on");}@Overridepublic void off() {System.out.println("xiaomiRouter off");}@Overridepublic void onWifi() {System.out.println("xiaomiRouter onWifi");}@Overridepublic void offWifi() {System.out.println("xiaomiRouter offWifi");}
}
//创建路由器工厂
public class RouterFactoryImpl implements AbstractFactory {@Overridepublic Phone createPhone(String phoneType) {return null;}@Overridepublic 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;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于云计算的虚拟电厂负荷预测
  • Vscode python无法转到函数定义
  • 23种设计模式详解
  • [vue] vue-seamless-scroll 滚动到第二遍的时候不能进行点击的问题
  • 如何删除git提交记录
  • js读取文件,生成随机题目,多项选择题则提供随机答案供选择
  • 两段有趣的代码(C语言函数指针)
  • 在C++中,如何避免出现Bug?
  • Mini-Omni 语言模型在流式传输中边思考边听说应用
  • C++ 封装 Socket 进行通信
  • Docker上安装mysql
  • 【Day14-单例设计模式动态代理】
  • Docker torchserve 部署模型流程
  • 数据分析-前期数据处理
  • 雷达液位计助力造纸行业精准测量
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • JavaScript对象详解
  • Java-详解HashMap
  • Js基础知识(四) - js运行原理与机制
  • PHP 7 修改了什么呢 -- 2
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • React Transition Group -- Transition 组件
  • ucore操作系统实验笔记 - 重新理解中断
  • Vue2.x学习三:事件处理生命周期钩子
  • 关于List、List?、ListObject的区别
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 一道闭包题引发的思考
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 智能合约开发环境搭建及Hello World合约
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​io --- 处理流的核心工具​
  • ​数据结构之初始二叉树(3)
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (4) PIVOT 和 UPIVOT 的使用
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (阿里云万网)-域名注册购买实名流程
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)PySpark3:SparkSQL编程
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)visual stdio 书签功能介绍
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .gitignore文件_Git:.gitignore
  • .Net 6.0--通用帮助类--FileHelper
  • .net dataexcel winform控件 更新 日志
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET 读取 JSON格式的数据
  • .net 使用ajax控件后如何调用前端脚本
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .net6+aspose.words导出word并转pdf
  • .net反编译工具