梳理你的思路(从OOP到架构设计)_基本OOP知识03

news/2024/12/12 11:08:05/

目录

1、<基类/子类 >结构的接口(卡榫函数)

1)卡榫(Hook)

2)卡榫函数的Java实现

2、IoC机制与基於 Default 軟硬整合觀點 函数

1)卡榫函数实现IoC机制

2)默认(Default)行为


1、<基类/子类 >结构的接口(卡榫函数)

1)卡榫(Hook)

所谓「卡榫(Hook)」,就是用来接合两个东西的接口。如果两个东西于不同时间出现,则一方会预留虚空,给予另一边于未来时刻能以实体来填补该空间,两者虚实相依,就密合起来了。设计优良的卡榫,可以让实体易于新陈代谢、抽换自如(Plug and Play, 俗称PnP)

Template Method設計模式

  • 变与不变的分离(Separate code that changes from the code that doesn’t)是设计卡榫(Hook)函数及应用框架之基本原则和手艺。
  • 分离出变(Variant)与不变(Invariant)部份之后,就可以将不变部份写在父类别(Superclass)里,而变的部份就写在子类别(Subclass)里

然后,藉由C++的类别继承(Inherit)机制组织起来

或者,藉由Java的类别扩充(Extend)机制组织起来

2)卡榫函数的Java实现

在Java里,使用抽象(abstract)函数或可覆写(overridable)函数来实现卡榫函数
 

interface IShape {void template_paint(Graphics gr);
} // 一般接口// Shape.java
import java.awt.*;
public abstract class Shape implements IShape {public void template_paint(Graphics gr){invariant_paint(gr); // 畫背景hook_paint(gr); // 畫前景}private void invariant_paint(Graphics gr){gr.setColor(Color.black);gr.fillRect(10,30, 200,100);} // 默認行為abstract protected void hook_paint(Graphics gr);
}// Bird.java
import java.awt.*;
public class Bird extends Shape {private void hook_paint(Graphics gr){// 畫圖(海鷗)指令gr.setColor(Color.cyan);gr.drawArc(30,80,90,110,40,100);gr.drawArc(88,93,90,100,40,80);gr.setColor(Color.white);gr.drawArc(30,55,90,150,35,75);gr.drawArc(90,80,90,90,40,80);}
}

2、IoC机制与基於 Default 軟硬整合觀點 函数

1)卡榫函数实现IoC机制
  • 控制反转(IoC: Inversion of Control)
  • IoC机制源自于OO语言(如C++等)的类别继承体系,例如C++语言中,基类的函数可以主动调子类的函数,这就是典型的IoC机制
  • 基类与子类之间,主控权是在基类手上,透过Hook函数来调用子类
  • 通常基类是撰写在先,而子类则撰写在后,这种前辈拥有主导权,进而「控制」后辈之情形,就通称为「控制反转」
2)默认(Default)行为
  • 基类的重要功能:提供默认(预设)行为
  • 基类可事先定义许多「默认」 (Default)函数。这些默认函数可让子类来继承(或调用)之。


http://www.ppmy.cn/news/1554475.html

相关文章

容器部署Prometheus+Grafana

一、Grafana介绍 Zabbix 和 Grafana 是两种流行的监控工具,它们在功能和用途上有所不同: Zabbix: Zabbix 是一个开源的监控解决方案,主要用于监控网络服务和应用程序。它包括了自己的数据存储解决方案,可以直接从监控的设备收集数据。Zabbix 提供了广泛的监控功能,包括但…

【离线环境迁移】使用Conda打包和还原Python环境指南

本文介绍了一种利用Conda工具快速打包和迁移Python环境的方法。 通过简单的步骤&#xff0c;轻松实现离线服务器的环境配置&#xff0c;解决网络限制问题。 1.创建环境并安装相关依赖 conda create -n myenv python3.x conda activate myenv conda install <package_list&g…

Linux絮絮叨(六) 文件与目录管理

Linux 的目录结构为树状结构&#xff0c;最顶级目录为根目录 / 绝对路径与相对路径 绝对路径&#xff1a;以 / 为起点的路径&#xff0c;例如 /usr/share/doc。相对路径&#xff1a;以当前路径为起点的路径&#xff0c;例如 cd ../man。 常用命令 1. ls (列出目录内容) 功能…

51c深度学习~合集9

我自己的原文哦~ https://blog.51cto.com/whaosoft/12750420 #傅里叶特征 (Fourier Feature&#xff09;与核回归 位置编码背后的理论解释 本文探讨了位置编码背后的理论基础&#xff0c;特别是傅里叶特征&#xff08;Fourier Feature&#xff09;与核回归&#xff08;Kern…

D 咖智能饮品机器人,门店引流新宠

在竞争激烈的商业环境中&#xff0c;门店客流量的竞争已进入白热化阶段。如何让路过门店的客户停下脚步&#xff0c;成为众多商家亟待解决的难题。传统的纸质海报往往难以吸引客户的注意力&#xff0c;而店员拉客的方式效率又相对低下&#xff0c;在这种情况下&#xff0c;D 咖…

使用Python和PyQt5实现Modbus TCP协议下的量程切换功能

使用Python和PyQt5实现Modbus TCP协议下的量程切换功能 在工业自动化系统中&#xff0c;设备的量程切换是一个常见的需求。本文将介绍如何使用Python和PyQt5开发一个图形用户界面&#xff08;GUI&#xff09;应用程序&#xff0c;以通过Modbus TCP协议向设备发送特定的指令&am…

海选女主角

Description 光头强虽然很喜欢教书&#xff0c;但是迫于生活压力&#xff0c;不得不想办法在业余时间挣点外快以养家糊口。 “做什么比较挣钱呢&#xff1f;筛沙子没力气&#xff0c;看大门又不够帅...”光头强老师很是无奈。 “冯小刚比你还难看&#xff0c;现在多有钱呀&a…

MindSearch深度解析实践

任务要求&#xff1a;在 官方的MindSearch页面 复制Spaces应用到自己的Spaces下&#xff0c;Space 名称中需要包含 MindSearch 关键词&#xff0c;请在必要的步骤以及成功的对话测试结果当中 1.在github codespace中配置环境 conda create -n mindsearch python3.10 -y conda…