如何理解代码中的抽象|设计模式基础

简介: 下面,我们可以通过问题的形式来加深我们对抽象这一概念的理解。

前置知识

  1. 了解面向对象语言
  2. 理解面向对象三大特性

前言

我们知道,在 Java 中可以使用抽象类或者使用接口来定义抽象方法,继而让继承或者实现它们的类来实现对于的抽象方法。这是抽象在 Java 当中最典型的表现形式。但是抽象作为 面向对象 语言中如此重要的特性,我们应该对其有更加深刻的了解,才能让我们对其使用得更加游刃有余。

下面,我们可以通过问题的形式来加深我们对抽象这一概念的理解。

关于抽象的问题

关于抽象问题,主要回答以下几个问题。

抽象类和接口的区别?

由于抽象类和接口有如下特性

  1. 抽象类三大特性(is-a,继承关系)
  • 抽象类不允许被实例化
  • 抽象类可以包含属性和方法
  • 子类继承抽象类,必须实现所有抽象方法
  1. 接口三大特性(ha-a,协议关系) [jdk8以下]
  • 接口不能包含属性
  • 接口不能包含代码实现
  • 类实现接口,必须实现所有抽象方法
  1. 那么,两者的区别就是
    抽象类可以包含属性和方法,其不能实例化,其功能主要是供子类复用。
    接口不能包含属性和被实现的方法,其功能主要是作为一种协议。

抽象和接口能实现哪些编程问题,有何意义

  1. 抽象类
  • 优雅的解决代码复用问题
  • 优雅的解决多态问题
  1. 接口
  • 解耦,隔离接口和具体的实现
  • 抽象为协议
  • 提高代码的可拓展性

如何模拟接口和抽象类

事实上,在允许继承的普通的代码中。我们定义我们的类满足他们自身的三大特性,即可模拟接口和抽象类了

例如,我们需要模拟接口的时候

我们只需要编写一个正常的类,定义好方法,在方法里面默认实现为抛出异常即可

这样子就满足了接口的三大特性,我们继承该自定义接口类之后,必须要重写对应的方法,否则调用的时候会抛出异常。

使用抽象类或者接口的不同时机

我们需要看待解决的问题

  • 解决代码复用问题。使用抽象类
  • 解决抽象问题,使用接口

为什么基于接口而非实现编程

在软件开发中,最大的挑战之一就是需求的不断变化,这也是考验代码设计好坏的一个标准。

越抽象、越顶层、越脱离具体某一实现的设计,越能提高代码的灵活性,越能应对未来的需求变化。好的代码设计,不仅能应对当下的需求,而且在将来需求发生变化的时候,仍然能够在不破坏原有代码设计的情况下灵活应对。

抽象就是提高代码扩展性、灵活性、可维护性最有效的手段之一

基于接口编程其实就是 基于抽象编程 。对于不稳定(很可能会修改)的系统,我们就要关注可维护性和可拓展性,就要思考其抽象化。


相关文章
|
1月前
|
设计模式 存储 Java
23种设计模式,备忘录模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】备忘录模式是一种行为设计模式,它能在不破坏对象封装的前提下,捕获并保存对象的当前状态,以便后面可以恢复到这个状态。
27 0
|
3天前
|
设计模式 前端开发 API
写出易维护的代码|React开发的设计模式及原则
本文对React社区里出现过的一些设计模式进行了介绍,并讲解了他们遵循的设计原则。
|
15天前
|
设计模式 存储 Java
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
|
29天前
|
设计模式 算法 Java
23种设计模式,访问者模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】访问者模式是一种将算法与对象结构分离的设计模式。这种模式主要用于执行一个操作(或一组操作)在一个对象结构的各元素上,它可以在不修改各元素的类的前提下定义新的操作。
18 2
|
29天前
|
设计模式 算法 Java
23种设计模式,模板方法模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。
18 0
|
29天前
|
设计模式 算法 搜索推荐
23种设计模式,策略模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】设计模式是软件工程中的一种最佳实践指导,用于解决常见的设计问题。它们被分类为创建型、结构型和行为型模式。其中,策略模式是一种行为型设计模式,旨在定义一系列算法,封装每一个算法,并使它们可互换。策略模式允许算法独立于使用它们的客户端变化
21 1
|
1月前
|
设计模式 Java
23种设计模式,状态模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改了它的类。
29 4
|
1月前
|
设计模式 Java
23种设计模式,观察者模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,使得当一个对象改变状态时,所有依赖于它的对象都会得到通知并自动更新。
24 2
|
1月前
|
设计模式 Java
23种设计模式,中介者模式的概念优缺点以及JAVA代码举例
【4月更文挑战第8天】中介者模式是一种行为设计模式,它通过一个中介对象来封装一系列对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
32 8
|
1月前
|
设计模式 Java
23种设计模式,迭代器模式的概念优缺点以及JAVA代码举例
【4月更文挑战第8天】迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问一个聚合对象中的各个元素,而无需暴露该对象的内部表示。它主要用于遍历集合对象(如列表、树等)。
27 9