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

前言

最近学习数据结构与算法,打算写一个用来拓展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();
    }
}

架构设计思考

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

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

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

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

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


总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值