Java 设计模式
模式的起源
设计模式这一概念,起源于建筑领域,是由Christopher Alexander(克里斯托佛·亚历山大)及其团队,长时间通过对建筑行业的调查研究,总结了建筑行业可重复复用的解决方案,并记录在《建筑的永恒之道》中。
在书中,对模式的定义是:每个模式都描述了一个在环境中不断出现的问题,然后描述了该问题的解决方案核心,通过这种方式,可以无数次地重用那些已有的成功的解决方案,无须再重复相同的工作。
简单表述就是:模式是在特定环境下解决某类重复出现问题的一套成功或有效的解决方案。
从模式 Pattern 的定义中可以看到,每个模式是在特定的环境下才有效,学习模式,除了了解模式本身的,还得了解这个模式在什么环境下才能使用。
引入模式到软件工程
在1994年,四人组(Gang of Four),归纳并发表了 23 种在软件开发中使用频率较高的设计模式,把模式的概念引入软件工程中,即软件模式(Software Patterns)。当然,模式的概念不止存在于设计模式中,还包括了架构模式、分析模式、过程模式等,在软件周期的每个阶段,都有相应被总结的模式。
什么是设计模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可扩展性和可维护性。通用设计模式有23个,每一个设计模式都是某一类典型问题的解决方案。
设计模式的本质
设计模式的本质是面向对象编程技术的熟练和灵活运用,要真正理解设计模式就需要透彻理解面向对象设计原则和面向对象三大特性(封装、继承、多态)。
所有市面上关于设计模式的书都是面向有一定 Java 语言基础和一定项目编程经验的读者,对于 Java 初学者由于对面向对象编程还不是很熟悉,缺乏项目实战经验,所以想要理解设计模式的难度很大,建议可以先看《Java 编程思想》这本书,啃透了再去深入学习设计模式,就会容易很多了。
学习设计模式的误区
初学设计模式很容易走入一个误区,那就是胡乱套用设计模式。不要以为在任何一个系统中都要使用设计模式,系统也不是套用设计模式越多越好。滥用设计模式将增加系统复杂度,降低系统的可维护性。平时多看一些设计模式使用经典案例,学习高手是如何灵活运用设计模式的。
学习设计模式五要素
-
名称:每一种设计模式都有名称,都是经过专门分类编目的,以便于学习交流
-
问题:每一种设计模式都是某一类典型问题的解决方案
-
实现:每一种设计模式都有一种或多种代码实现方式(UML类图)
-
优缺点:每一种设计模式都存在优缺点(没有完美无缺的解决方案)
-
适用场景:每一种设计模式都有其常见典型的适用场景
任何一个设计模式,只有掌握了以上五要素才能真正掌握了,才能在项目实战中合理的使用设计模式。