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

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

前置知识

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

前言

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

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

关于抽象的问题

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

抽象类和接口的区别?

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

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

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

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

如何模拟接口和抽象类

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

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

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

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

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

我们需要看待解决的问题

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

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

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

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

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

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


相关文章
|
2天前
|
设计模式 Java
Java设计模式:组合模式的介绍及代码演示
组合模式是一种结构型设计模式,用于将多个对象组织成树形结构,并统一处理所有对象。例如,统计公司总人数时,可先统计各部门人数再求和。该模式包括一个通用接口、表示节点的类及其实现类。通过树形结构和节点的通用方法,组合模式使程序更易扩展和维护。
Java设计模式:组合模式的介绍及代码演示
|
5天前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提高代码的可维护性与扩展性
在本文中,我们将深入探讨PHP编程语言中设计模式的重要性,以及如何通过应用这些模式来提高代码的可维护性和扩展性。设计模式是一套被反复使用、经过分类编目的代码设计经验的总结。它们代表了最佳的实践,能帮助开发者编写出更加健壮、灵活和可复用的代码。本文将介绍几种常见的设计模式,并通过PHP代码示例展示其应用。
|
22天前
|
设计模式 Java
重构你的代码:探索Java中的混合、装饰器与组合设计模式
【8月更文挑战第30天】在软件开发中,设计模式为特定问题提供了结构化的解决方案,使代码更易理解、维护及扩展。本文将介绍三种常用的 Java 设计模式:混合模式、装饰器模式与组合模式,并附有示例代码展示实际应用。混合模式允许通过继承多个接口或抽象类实现多重继承;装饰器模式可在不改变对象结构的情况下动态添加新功能;组合模式则通过树形结构表示部分-整体层次,确保客户端处理单个对象与组合对象时具有一致性。
15 1
|
1月前
|
设计模式 算法 安全
Java编程中的设计模式:提升代码的可维护性和扩展性
【8月更文挑战第19天】在软件开发的世界里,设计模式是解决常见问题的一种优雅方式。本文将深入探讨Java编程语言中常用的几种设计模式,并解释如何通过这些模式来提高代码的可维护性和扩展性。文章不涉及具体的代码实现,而是侧重于理论和实践相结合的方式,为读者提供一种思考和改善现有项目的新视角。
|
1月前
|
设计模式 Java
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
文章提供了一份常用设计模式的全面介绍,包括创建型模式、结构型模式和行为型模式。每种设计模式都有详细的概念讲解、案例说明、代码实例以及运行截图。作者通过这些模式的介绍,旨在帮助读者更好地理解源码、编写更优雅的代码,并进行系统重构。同时,文章还提供了GitHub上的源码地址,方便读者直接访问和学习。
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
|
20天前
|
前端开发 C# 设计模式
“深度剖析WPF开发中的设计模式应用:以MVVM为核心,手把手教你重构代码结构,实现软件工程的最佳实践与高效协作”
【8月更文挑战第31天】设计模式是在软件工程中解决常见问题的成熟方案。在WPF开发中,合理应用如MVC、MVVM及工厂模式等能显著提升代码质量和可维护性。本文通过具体案例,详细解析了这些模式的实际应用,特别是MVVM模式如何通过分离UI逻辑与业务逻辑,实现视图与模型的松耦合,从而优化代码结构并提高开发效率。通过示例代码展示了从模型定义、视图模型管理到视图展示的全过程,帮助读者更好地理解并应用这些模式。
35 0
|
1月前
|
设计模式 前端开发 算法
"揭秘前端开发的隐藏武器:掌握这些设计模式,让你的代码优雅升级!"
【8月更文挑战第21天】设计模式为前端开发提供了解决常见问题的模板,助力编写清晰、可维护的代码。本文概览了几种关键模式:模块模式通过立即执行函数表达式实现封装;单例模式确保全局唯一实例,适用于状态管理;工厂模式根据条件创建不同类型的对象;观察者模式建立对象间的依赖,便于事件处理和数据绑定;策略模式封装可互换的算法,提高灵活性。掌握这些模式能显著提升代码质量和开发效率。
27 0
|
1月前
|
设计模式 算法 数据库连接
PHP编程中的设计模式:提升代码的可维护性与扩展性
在软件开发的世界里,设计模式是解决常见问题的经典方法。对于PHP开发者而言,掌握这些模式不仅能够提高代码质量,还能让开发过程更加高效。本文将介绍几个关键的设计模式,并通过实例展示如何将这些理念应用到实际项目中去。
27 0
|
2月前
|
设计模式 存储 C#
|
2月前
|
设计模式 算法 C#
23种设计模式【C#代码举例】(上)
23种设计模式【C#代码举例】(上)