摘自《设计模式》一书:
在设计过程中出现的抽象是进行设计的关键 灵活。
这里的“抽象”到底是什么意思?
答案 0 :(得分:2)
抽象是概念的概括,其中删除了不需要的细节(即抽象的),以便更好地描述特定概念的某些方面。例如,汽车的抽象可以是具有四个轮胎,一个发动机,可以容纳五名乘客等的车辆。细节,例如座椅的材料和燃烧过程中断裂的分子键。在这种情况下,引擎是多余的(它们只会使我们试图描述的概念更加混乱)。
对于软件,我们一直在使用抽象,因为它们使我们能够采用复杂的概念并将其提炼成可管理的单元。例如,我们可以说一个学生具有以下属性:
在这种情况下,我们不关心学生的过去(她的父母是谁,她在哪个小镇长大等)和其他额外的细节。在我们的系统中,我们只关心学生有学生证,姓名和就读于特定年级。
此外,在模式的情况下,我们将类和类组抽象为更易于管理的单元。例如,如果我们可以有一个代表商店数据的类(用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
。这意味着我们的系统现在只知道数据存储的抽象(它可以存储数据),而不是特定存储的 存储方式的详细信息。