热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

面向接口编程(接口对象的生成的两种模式业务模块自生成接口对象、工厂模式生成接口对象)...

编程的过程中如果程序模块要调用一个接口类的功能,就必须先有生成的一个接口类实例对象,而接口对象又无法由接口自己生成,必须由实现接口的子类或
  1. 编程的过程中如果程序模块要调用一个接口类的功能,就必须先有生成的一个接口类实例对象,而接口对象又无法由接口自己生成,必须由实现接口的子类或则接口的实现类来生成。如果把调用接口的程序称为业务模块,那么类比现实社会,接口的实例对象就是产品,业务模块就是客户。在这里我们把冰箱的功能要求(即对冰箱模具的要求或冰箱者模具的模具)类比为程序的接口(一组方法规范的集合),冰箱的款式(即冰箱的模具)类比为程序中实现接口的一个接口的子类。


FHOK37BWLBMDMCJLW5}}1%R客户使用(符合对模具所要求的功能的)冰箱的功能(客户使用用符合功能要求的冰箱功能)    对应业务模块使用接口对象的方法



image

最终的简化业务模型如下:客户就是“用一下冰箱”,对应的软件模型是  业务模块“使用一下接口对象”。这就牵涉到由谁来生成冰箱的问题

image

方法一:业务模块自生成接口对象。由客户自己生成冰箱,然后自己用。方法二:工厂模式生成接口对象。 由客户向工厂下订单有工厂生产出冰箱,然后客户再使用。然而这两种方式有什么本质的区别呢?我们逐一实现,先看第一种方式:

image

客户使用冰箱包括第一步造出冰箱,第二步使用冰箱。客户要使用普通型冰箱,必须先选模具1然后用模具1造出普通冰箱

现实社会与软件社会的对应关系如下图:



image

如果:客户对冰箱的型号要求发生变化,要用“时尚冰箱”,那么客户必须从新选择模具2造出“时尚冰箱”,客户的流程就要变化。对应到软件世界,业务模块的代码就要相应的进行更改。如下图:

image

这样的结果就是客户使用不同型号的冰箱,客户就要进行一次模具的选择,客户流程随着客户选用的冰箱型号的变化而变化。对于软件业务模块而言要是对冰箱的款式要求有变化,就要选择不同的子类,业务模块随需求的冰箱款式的变化而变化。

如果软件又扩展了接口的新子类的数量,客户想要选择新款的冰箱,就又要选择出新款模具,生产新款冰箱,客户的使用流程中又要有变化。

结论:业务模块自生成接口对象 的点

1、软件业务模型随着所要求的新的子类对象的变化而变化。

2、软件在编译阶段之前业务模块就有接口子类对象的实例化代码,业务模块代码在编译的时候便对子类的实例进行了编译,编译后的程序在运行时不能再变更业务子类对象的选择。换句话说业务模块编译后,只能使用固定的子类对象以及对象的方法。程序被写死啦!程序要运行新的子类对象,必须重写程序的业务模块,重新编译。同理,如果接口有了新的实现子类,想用只有重写业务代码重新编译。耦合度太深。对于网路程序而言,业务模块算是前台调用的模块,相当于前台也要重写重新编译。

方法二:工厂模式生成接口对象。


转:https://www.cnblogs.com/ebirde/p/9299133.html



推荐阅读
  • 本文整理了一系列Java面试问题,涵盖Java开发环境的分类、Java语言的核心特性、Linux环境下Java SE的安装步骤、常用的Java开发工具介绍,以及类与对象的基本概念等。 ... [详细]
  • Kotlin 扩展函数详解及其工作原理
    本文详细探讨了 Kotlin 中的扩展函数概念,包括其定义、使用方式以及背后的实现机制,并分析了使用扩展函数时的一些限制。 ... [详细]
  • 精通C++并非易事,为何它比其他语言更难掌握?这主要归因于C++的设计理念,即不强迫用户接受特定的编程风格或限制创新思维。本文探讨了如何有效学习C++,并介绍了几本权威的学习资源。 ... [详细]
  • 使用Jenkins构建Java项目实践指南
    本指南详细介绍了如何使用Jenkins构建Java项目,包括环境搭建、工具配置以及项目构建的具体步骤。 ... [详细]
  • 前端常用的布局类型——前端布局
    1.Static静态布局固定宽高:2.Liquid流式布局宽高用百分比,按屏幕分辨率调整,布局不发生变化3.Adaptive自适应 ... [详细]
  • Python库在GIS与三维可视化中的应用
    Python库极大地扩展了GIS的能力,使其能够执行复杂的数据科学任务。本文探讨了几个关键的Python库,这些库不仅增强了GIS的核心功能,还推动了地理信息系统向更高层次的应用发展。 ... [详细]
  • Kafka Topic 数据管理与清理策略
    本文探讨了在生产环境中如何有效管理和定期清理Kafka Topic中的数据。介绍了基于时间、日志大小和日志起始偏移量三种清除方式,并重点讲解了基于时间的清除策略及其配置方法。 ... [详细]
  • 探讨了在使用Layui框架时,如何处理表格中固定列与其他列行高不一致的情况,提供了有效的解决方案。 ... [详细]
  • 本文介绍了如何通过自定义配置类,利用 `WebMvcConfigurer` 接口来扩展 Spring MVC 的功能,实现默认首页的自动跳转,同时避免使用 `@EnableWebMvc` 注解全面接管 Spring MVC 的默认配置。 ... [详细]
  • 在尝试通过HTTP请求访问位于http://www.xxx.cn/net/Clicked.asmx的Web服务时,发现输入特定参数后,偶尔会接收到不成功的响应,表现为XML格式的空字符串。此现象并非每次发生,其根本原因尚不明确。 ... [详细]
  • 2023年PHP实现1GB视频上传的最佳实践
    本文将详细介绍如何使用PHP处理1GB大小的视频上传问题,包括文件类型验证、上传大小限制设置及优化上传过程,确保高效稳定地完成大文件上传。 ... [详细]
  • 本文详细介绍了 TypeScript 中类装饰器的使用方法和实际应用场景,包括如何定义和使用无参数及带参数的类装饰器。 ... [详细]
  • 阿里飞猪旅行搜索技术的革新与实践
    本文由林睿(阿里飞猪)分享,经杜正海、Hoh编辑整理,并由DataFunTalk平台发布。文章探讨了旅行搜索技术从满足基本需求到集成高级功能的发展历程,特别是在阿里飞猪平台上的应用与创新。 ... [详细]
  • 本文旨在深入探讨Java代理模式的基本概念与实际应用场景,通过实例分析如何利用代理模式在不修改原对象的前提下,实现功能的增强或限制。 ... [详细]
  • 本文介绍了Kettle资源库的基本概念、类型及其管理方法,同时探讨了Kettle的不同运行方式,包括图形界面、命令行以及API调用,并详细说明了日志记录的相关配置。 ... [详细]
author-avatar
一起回到我们的那个夏天
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有