【架构设计笔记】抽象接口、抽象类和实现类

news/2024/9/28 11:06:39 标签: 笔记

前言

最近学习数据结构与算法,打算写一个用来拓展JavaScript基础数据结构的npm包,例如/队列/链表之类的,从中有了不少收获,主要是关于工程架构角度,写个笔记,总结一下,将从架构设计的角度写写抽象接口抽象类实现类的内容及其应用。

1. 抽象接口(Interface

定义:
接口定义了一组方法和属性的集合,是一种契约,规定了实现类必须提供的功能。接口本身不包含任何实现,只定义方法签名。

特点:
强制实现:任何实现接口的类都必须提供接口中定义的所有方法。
多重实现:一个类可以实现多个接口,从而实现多重继承的效果。
松耦合:接口提供了一种解耦机制,使得代码依赖于接口而不是具体实现,有助于提高代码的灵活性和可测试性。

示例:

interface IQueue<T> {
    enqueue(element: T): void;
    dequeue(): T | undefined;
    size(): number;
    isEmpty(): boolean;
    peek(): T | undefined;
    clear(): void;
    print(): T[];
}

2. 抽象类(Abstract Class

定义:
抽象类是一种不能被实例化的类,它可以包含抽象方法(没有实现的方法)和具体方法(有实现的方法)。抽象类用于定义一些基本的行为和属性,并且可以被具体类继承和扩展。

特点:
部分实现:抽象类可以包含部分实现,子类可以继承这些实现,从而减少重复代码。
提供默认行为:抽象类可以提供一些默认行为,子类可以选择性地重写这些行为。
不能实例化:抽象类不能直接创建实例,必须通过继承来使用。

示例:

abstract class AbstractQueue<T> implements IQueue<T> {
    protected elements: T[] = [];

    abstract enqueue(element: T): void;
    abstract dequeue(): T | undefined;

    size(): number {
        return this.elements.length;
    }

    isEmpty(): boolean {
        return this.elements.length === 0;
    }

    peek(): T | undefined {
        return this.elements[0];
    }

    clear(): void {
        this.elements = [];
    }

    print(): T[] {
        return this.elements;
    }
}

3. 实现类(Concrete Class

定义:

实现类是具体的类,它实现了接口或继承了抽象类,并提供了所有抽象方法的具体实现。实现类可以被实例化,并且可以包含额外的方法和属性。

特点:
完整实现:实现类必须提供接口或抽象类中所有抽象方法的具体实现。
可实例化:实现类可以创建实例,并用于实际操作。
扩展功能:实现类可以添加额外的方法和属性,以扩展接口或抽象类的功能。

示例:

class Queue<T> extends AbstractQueue<T> {
    enqueue(element: T): void {
        this.elements.push(element);
    }

    dequeue(): T | undefined {
        return this.elements.shift();
    }
}

架构设计思考

接口优先设计:
在设计系统时,优先考虑接口定义。这有助于明确系统的功能需求和契约,确保实现类之间的解耦和灵活性。

使用抽象类减少重复代码:
抽象类可以提供一些默认实现,减少子类中的重复代码。通过继承抽象类,子类可以复用已有的实现,并在需要时进行扩展或重写。

严格实现接口:
为了确保类严格实现接口,可以直接在具体类中实现接口,而不通过抽象类。这样可以确保类实现接口中的所有方法和属性,不能多也不能少。

类型断言和类型检查:
在某些情况下,可以使用类型断言和类型检查来确保类实例严格符合接口。这可以在运行时提供额外的安全性。

灵活扩展和维护:
通过接口和抽象类的结合使用,可以实现系统的灵活扩展和维护。新功能可以通过实现新的接口或继承抽象类来添加,而不会影响现有代码。


总结

个人感觉利用好抽象接口、抽象类和实现类真的可以极大的提高系统的灵活性、可维护性和可扩展性,起码不会写出太史山的代码,好好学习,与君共勉。


http://www.niftyadmin.cn/n/5680971.html

相关文章

【高频SQL基础50题】6-10

目录 1.上级经理已离职的公司员工 2.修复表中的名字 3. 寻找用户推荐人 4.产品销售分析 I 5.平均售价 1.上级经理已离职的公司员工 子查询。 先根据薪水大小查询&#xff0c;再根据manager_id查询该员工是否存在&#xff0c;最后做排序。 # Write your MySQL query st…

物联网智能项目全面解析

目录 引言 一、物联网概述 1.1 什么是物联网 1.2 物联网的历史与发展 二、物联网智能项目分类 三、关键组件与技术 3.1 传感器和执行器 3.2 连接技术 3.3 数据处理与分析 3.4 用户界面 四、物联网智能项目案例分析 4.1 智能家居 4.2 智慧城市 4.3 工业物联网 4.4…

确保架构与业务一致性和合规性的成功转型之路:理论与实践的全面解读

架构与业务一致性在数字化转型中的重要性 在数字化转型的过程中&#xff0c;企业架构与业务的一致性是确保技术变革能够真正推动业务发展的关键因素之一。企业架构不仅要支持业务需求&#xff0c;还需要确保与行业标准、法律法规的合规性。通过将理论转化为实践&#xff0c;企…

C++的vector优化

1、C中的动态数组一般是特指vector类 2、vector需要优化的原因之一是当我们push_back元素到数组中时&#xff0c;如果原来分配给动态数组的内存不够用了&#xff0c;那么就会找一块更大的内存空间分配给数组&#xff0c;把旧的内容复制到新的内存中去&#xff0c;这就是导致程…

Paxos 协议详解:分布式系统一致性的基石

文章目录 1. 分布式系统与一致性问题1.1 分布式系统的定义1.2 一致性问题的起源1.3 CAP 定理及其影响1.4 分布式系统中的失败假设 2. Paxos 协议的背景与介绍2.1 Paxos 协议是什么2.3 Paxos 解决什么问题 3. Paxos 的基本原理3.1 Paxos 角色3.2 Paxos 的多数原则3.3 Paxos 协议…

既然有HTTP协议,为什么还要有RPC?

既然有HTTP协议&#xff0c;为什么还要有RPC&#xff1f; ​ 既然有HTTP协议&#xff0c;为什么还要有RPC&#xff1f; 有点既生瑜何生亮的味道。 第一次接触RPC我就很懵&#xff0c;平时我HTTP协议用得好好的&#xff0c;为什么还需要RPC协议&#xff1f; 于是我去百度&am…

高并发内存池(五):ThreadCache、CentralCache和PageCache的内存回收机制 及 释放内存过程的调试

目录 ThreadCache的内存回收机制 补充内容1 补充内容2 补充内容3 新增关键函数ListTooLong CentralCache的内存回收机制 补充内容1 新增关键函数MapObjectToSpan 新增关键函数ReleaseListToSpans PageCache的内存回收机制 补充内容1 补充内容2 新增关键函数Releas…

【怎样基于Okhttp3来实现各种各样的远程调用,表单、JSON、文件、文件流等待】

HTTP客户端工具 okhttp3 form/json/multipart 提供表达、json、混合表单、混合表单文件流传输等HTTP请求调用支持自定义配置默认客户端&#xff0c;参数列表如下&#xff1a; okhtt3.config.connectTimeout 连接超时&#xff0c;TimeUnit.SECONDSokhtt3.config.readTimeOut 读…