重学设计模式(一设计模式概述)

Posted 穆瑾轩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重学设计模式(一设计模式概述)相关的知识,希望对你有一定的参考价值。

1、设计模式概述

1.1、软件设计模式的产生背景

    “设计模式”最初并不是出现在软件设计中,而是被用于建筑领域的设计中。

    1997年,美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造(A Pattern Language: Towns Building Construction)中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。

    直到 1990 年,软件工程界才开始研讨设计模式的话题,后来召开了多次关于设计模式的研讨会。

    1995 年,艾瑞克·伽马(ErichGamma)、理査德·海尔姆(Richard Helm)、拉尔夫·约翰森(Ralph Johnson)、约翰·威利斯迪斯(John Vlissides)等 4 位作者合作出版了《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)一书,在本教程中收录了 23 个设计模式,这是设计模式领域里程碑的事件。

    GoF反复向你强调一个宗旨:要让你的程序尽可能的可重用。

1.2、什么是设计模式

    设计模式(Design Pattern)是一种模式,是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案,它是思想的体现,而非具体的实现。

    这 23 种设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性,以及类的关联关系和组合关系的充分理解(即包含了面向对象的精髓)。

1.3、我们为什么要学习设计模式

    事实上,我们可能很多情况下都是在不了解设计模式或者了解的不多的情况下作为程序员工作了多年。也在不经意间实现了一些设计模式。

    那么我们为什么还要学习设计模式?

    一方面,设计模式教我们如何使用面向对象设计的原则解决各种问题;

    另一方面,设计模式定义了一种通用语言(跟框架一样,统一一个标准),让大家在做系统设计的时候,能更有效的交流。

    我们学习设计模块的核心思想是解耦合,并不是消除耦合,而是把耦合控制在一定范围,保证这个范围的整洁。

    使用设计模式的步骤可以总结成两句话:

    1)设计模式中提到一句很精髓的话:找到稳定点和变化点,运用抽象,把变化点隔离起来。

    2)先满足设计原则,再迭代出设计模式。

1.3、接口与抽象类

    在学习设计模式前,我们先来复习一下什么是接口、什么是抽象类。

    在面向对象的设计领域里,有时候会用is-a、has-a、like-a来描述他们之间的关系。例如:A is-a B,代表B是A的父类;A has-a B,那么B就是A的组成部分。A like-a B,则代表B就是A的接口。

    设计模式并非只针对于java,而是所有面向对象语言的设计模式,在接下来的设计模式讲解中,我们以java为例。为什么选择java?java作为一门集大成的语言,博纳众多语言之所长,是最优秀的面向对象语言之一。

1.3.1、什么是接口

    接口通常代表一种承诺或者规范,是对象必须遵守的承诺,即使实现类发生再大的变化,也能保证所有的实现类都有相关的方法可供调用;也就是说,实现类有责任去编写实现我接口中的方法,即使是一个空方法。

    java将接口的概念升为独立的结构,体现了接口与实现的分离。

1.3.2、什么是抽象类

    在面向对象的概念中,我们所有的对象都是通过类来描述的。而反过来确不是这样的,并不是所以的类都是用来描绘对象的,如果一个类中没有足够的信息来描绘一个具体的对象,那么这样的类就是抽象的。

    抽象类除了不能实例化对象之外,类的其它功能依然存在。抽象类更多的是对通用的、基础的方法封装,让子类复用,避免在子类开发重复的代码。子类只需实现抽象方法,也可以有选择的覆盖抽象父类的方法。

1.3.3、接口与抽象类的区别

  • 一个类可以实现多个接口,但是只能继承一个抽象类;

  • 接口都是抽象方法,而抽象类中既可以有抽象方法,也可以有实例(具体)方法;

  • 接口中的变量都是public static final;而抽象类中的变量可以被任何通用修饰符修饰;

  • 接口的方法都是public;抽象类中的方法可以是public、protected、private或者默认的package;

  • 接口不能定义构造函数,但抽象类可以。

以上是关于重学设计模式(一设计模式概述)的主要内容,如果未能解决你的问题,请参考以下文章

操作系统精髓与设计原理------调度概述

第一章 计算机系统概述 (操作系统——精髓与设计原理)

操作系统精髓与设计--多处理器和实时调度

7张图揭晓RocketMQ存储设计的精髓

7张图揭晓RocketMQ存储设计的精髓

设计模式概述