GoF书中的这是什么意思?

时间:2019-07-12 14:58:53

标签: design-patterns

摘自《设计模式》一书:

  

在设计过程中出现的抽象是进行设计的关键   灵活。

这里的“抽象”到底是什么意思?

1 个答案:

答案 0 :(得分:2)

抽象是概念的概括,其中删除了不需要的细节(即抽象的),以便更好地描述特定概念的某些方面。例如,汽车的抽象可以是具有四个轮胎,一个发动机,可以容纳五名乘客等的车辆。细节,例如座椅的材料和燃烧过程中断裂的分子键。在这种情况下,引擎是多余的(它们只会使我们试图描述的概念更加混乱)。

对于软件,我们一直在使用抽象,因为它们使我们能够采用复杂的概念并将其提炼成可管理的单元。例如,我们可以说一个学生具有以下属性

  1. 名称
  2. ID
  3. 等级

在这种情况下,我们不关心学生的过去(她的父母是谁,她在哪个小镇长大等)和其他额外的细节。在我们的系统中,我们只关心学生有学生证,姓名和就读于特定年级。

此外,在模式的情况下,我们将类和类组抽象为更易于管理的单元。例如,如果我们可以有一个代表商店数据的类(用Java编写的代码):

public class Data { /* ... */ }

public class MySqlDataStore {

    public void store(Data data) {
        // ... write the data to a MySQL database ...
    }
}

这在大多数情况下就足够了,但是如果我们想采用多种存储数据的方式怎么办?即如果我们不想将系统与MySQL结婚怎么办?为了解决这个问题,我们可以将MySQL数据存储抽象为一个接口:

public interface DataStore {
    public void store(Data data);
}

public class MySqlDataStore implements DataStore {

    @Override
    public void store(Data data) {
        // ... write the data to a MySQL database ...
    }
}

现在,系统的其余部分可以依赖于DataStore接口而不是MySqlDataStore。这意味着我们的系统现在只知道数据存储的抽象(它可以存储数据),而不是特定存储的 存储方式的详细信息。