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

设计模式(六)—— 适配器模式、建造者模式/生成器模式、命令模式、工厂模式

一、适配器模式

理解①:很简单,可以直接理解成“充电器转接头”。

理解②:asList源码的注解里将其比喻为一个bridge,如下图:

理解③:我通过调用第一个API得到一个返回,然后这个返回需要作为第二个API的参数,但是二者类型不同,所以我就需要一个适配器。在调用第一个API和调用第二个API之间,调用一下这个适配器,给我转换一下。编程变得如此简单!

写一个便于理解的小demo

public 适配器方法(OldObject oldObj){ NewObject newObj= new NewObject(); newObj.setName("_weChat_id_"+oldObj.getName()); newObj.setTranCode("WPS"+oldObj.getTranCode()); newObject.setXxx(... oldObj.getXxx()); .....; .....; return newObj; } main(){ //1.API1返回一个陈旧的对象 OldObject oldObj = API1(); //2.转换一下 NewObject newObj = 适配器方法(oldObj); //3.就可以作为API2的入参了 API2(newObj); }

二、建造者模式/生成器模式

先简单记一下,以后再来认真写

还是造房子那个例子,一个房子分为①打地基 ② 砌墙 ③封顶三步,如果不用设计模式去写的话。就是一个超类,然后多个子类继承超类去重写

但是这样有两个缺点:

(1)产品和建造的过程是高度耦合的(针对这个问题,单独定义product类,以组合的方式放在Builder超类的成员变量中)

(2) 客户端(main方法)调用的时候,必须了解建房的步骤,要了解应该先打地基,再。。(针对这个问题,出现了Director,指挥者知道建房子的步骤就行了,客户端调用的时候,直接new一个指挥者,客户端啥都不用知道)

三、工厂模式

世间所有设计模式都是同一个设计模式——识别变化点并隔离变化点

如何封装?没有什么是加一层不能解决的。加的这一层就是工厂

其次还是要重申一遍,23个设计模式可以分成三大类:创建型模式、结构型模式、行为型模式。本次学的工厂类属于创造型模式,你要有了这个概念,才知道我们下面是在研究如何更好的构造对象。

简单工厂模式就是,不管什么车都放到一个工厂里去做;工厂模式就是一个车型一个工厂,如果有新型车就再开一个新工厂。

真实开发中,二者没有优劣之分,都能用,如果你的产品少,并且业务基本上不改,那完全可以用简单工厂模式呀。

3.1 简单工厂模式

由工厂类根据传入的参数,决定创建哪种具体的通知对象。

// 抽象产品:汽车 abstract class Car { public abstract void drive(); } // 具体产品:轿车 class Sedan extends Car { @Override public void drive() { System.out.println("驾驶轿车,舒适平稳"); } } // 具体产品:SUV class SUV extends Car { @Override public void drive() { System.out.println("驾驶SUV,视野开阔"); } } // 简单工厂:汽车工厂 class CarFactory { public static Car createCar(String type) { if ("sedan".equalsIgnoreCase(type)) { return new Sedan(); } else if ("suv".equalsIgnoreCase(type)) { return new SUV(); } else { throw new IllegalArgumentException("未知车型: " + type); } } } // 客户端 public class SimpleFactoryExample { public static void main(String[] args) { Car car1 = CarFactory.createCar("sedan"); car1.drive(); Car car2 = CarFactory.createCar("suv"); car2.drive(); } }

但是我们要新增一个新车型的话,还是要打开工厂类去新增里面的if-else,那就再继续隔离变化点——继续拆!

3.2 工厂模式

定义一个抽象工厂,将具体创建哪款车的决定延迟到子工厂中。每个车型都有自己专属的工厂。

// 抽象产品:汽车 abstract class Car { public abstract void drive(); } // 具体产品:轿车 class Sedan extends Car { @Override public void drive() { System.out.println("驾驶轿车,舒适平稳"); } } // 具体产品:SUV class SUV extends Car { @Override public void drive() { System.out.println("驾驶SUV,视野开阔"); } } // 抽象工厂:汽车工厂(创建者) abstract class CarFactory { // 工厂方法:由子类决定生产哪种车 public abstract Car createCar(); // 模板方法:造车 + 试驾 public void testDrive() { Car car = createCar(); System.out.print("新车下线 -> "); car.drive(); } } // 具体工厂:轿车工厂 class SedanFactory extends CarFactory { @Override public Car createCar() { return new Sedan(); } } // 具体工厂:SUV工厂 class SUVFactory extends CarFactory { @Override public Car createCar() { return new SUV(); } } // 客户端 public class FactoryMethodExample { public static void main(String[] args) { CarFactory sedanFactory = new SedanFactory(); sedanFactory.testDrive(); // 生产轿车并试驾 CarFactory suvFactory = new SUVFactory(); suvFactory.testDrive(); // 生产SUV并试驾 } }
http://www.jsqmd.com/news/896123/

相关文章:

  • GCViewer vs. GCEasy:两款免费JVM GC日志分析工具,我该选哪个?
  • 2026年黄金回收行业优质服务商推荐:黄金回收/旧金回收/金银回收/黄金以旧换新/投资金条,认准深圳灵基数字科技有限公司(金淘淘) - 2026年企业资讯
  • 大众点评全站数据采集:高效实现动态字体加密破解与餐饮数据获取
  • 2026年宜昌装修公司TOP10排行榜:金螳螂家以硬核实力打造高性价比口碑家装 - 速递信息
  • Keyboard Chatter Blocker:三招解决机械键盘连击问题,让你的旧键盘焕发新生
  • 暗黑破坏神2存档编辑器:5分钟快速上手的终极修改指南
  • 探索GMPlot:在Python中绘制地理数据的高效工具
  • 跨系统数据搬运的“破壁者”:实测AI Agent如何终结人肉复制粘贴
  • python mitmproxy抓包详细过程
  • 全国不锈钢管厂家实力排行:资质与服务维度对比 - 速递信息
  • 广州包包回收行情解读!看懂成色估价,卖包不亏价 - 奢侈品回收测评
  • 使用Kotlin构建代码知识图谱:从实体关系到智能查询的工程实践
  • 终极指南:如何免费解锁《艾尔登法环》帧率限制,畅享高帧率游戏体验
  • 工业网络新引擎—基于IPQ5018的WiFi 6工业路由器核心优势与场景化部署解析
  • 清华大学thuthesis论文模板:在Overleaf上撰写完美学位论文的终极指南
  • 2026 GEO 优化公司选型: AI 时搜索优化核心概念|附 5 家服务商推荐 - 资讯快报
  • 西门子博途软件安装问题汇总
  • 抖音无水印视频下载终极方案:douyin-downloader专业指南
  • 深圳物业经理培训哪家好?鑫诺教育:6年专注物业考证,高通过率更靠谱 - 奔跑123
  • 2026年 水处理设备/纯水处理设备/反渗透软水/工业一体化纯净水/超纯水RO反渗透设备厂家推荐与选购指南 - 品牌企业推荐师(官方)
  • FModel:虚幻引擎游戏资源逆向工程与资产提取技术深度解析
  • 3分钟高效转换:Ofd2Pdf免费开源工具完全指南
  • 2026年5月欧米茄二手市场真假混卖现状权威核验 - 速递信息
  • 桌面分区革命:如何用NoFences彻底告别Windows桌面混乱
  • 杭州市钱塘区杭来环保科技:杭州水下打捞公司 - LYL仔仔
  • 51单片机直流电机控制
  • 前端包管理咋选?我从npm叛逃到pnpm的血泪史(附避坑指南)
  • 毕业论文的加速引擎!常用的AI写作辅助网站,成稿速度超迅速
  • 金华高复学校哪家好?东阳高复中心 30 年铸就浙中复读标杆 - 玖叁鹿
  • 2026优选号卡平台推荐|卡立方号卡平台 创始人邀请码000000顶级代理招募 - 博客万