Java与模式
本人接下来要学习Java与模式一书(阎宏编著)在学习过程中记下自己学习的一些心得和体会,希望和大家一起学习共同探讨与讨论。
呵呵,这句话挺有味道的,和大家一起分享下:
在西方的思想里面,分析一个结构直到把它分解为不可分割的单位,再加以数量化的研究和描述,是其典型的数理分析的套路。在西方科学文化中,不能够精确化和数量化的结构不受重视。而在中国传统的文化里面,不能够精确化和数量化并不是研究的障碍,中国的阴阳思想可以灵活地描述任何的自然物、人造物和人类思想。
我感觉这句话道出了西方思维与东方思维的差别。
在这本书里,作者凭借深厚的自然科学和中国传统哲学的功底,以及多年来对模式理论的研究,讲解软件设计模式的理论,它的简要历史,以及它与中国道家文化的渊源。
这本书分为三大部分:
第一部分(UML和模式介绍):
这一部分包括两个内容:模式理论背景的介绍和UML的简介,“模式的简史和形而上学”一章简单地讨论了模式理论的背景、它与中国道家思想的渊源关系,以及模式理论的基础概念。“统一建模语言UML简介”一章简单地介绍了UML的背景、基本概念,以及后面将要用到的几种UML图。
第二部分(面向对象的设计原则):
如何同时提高一个软件系统的可维护性(Maintainablity)和可复用性(Reuseability)是面向对象设计要解决的核心问题。在我们经过一段时间的对设计模式的学习和使用之后,就会觉得这些孤立的设计模式背后应当由一些更为深层的,更具有普遍性的、共同的思想原则。也就是设计原则是普遍性的原则,而设计模式则是设计原则在具体问题中体现。
有一个问题可能大家有点不是很清楚,我把它抽出来,说下,什么是系统的复用:
传统的复用: 代码的剪贴复用,算法的复用,数据结构的复用。
面向对象设计的复用:数据的抽象化和继承关系使得概念和定义可以复用,多态性使得实现和应用可以复用。而抽象化和封装可以保持和促进系统的可维护性。这样一来,复用的焦点不再集中在函数和算法的等具体实现细节上,而是集中在最重要的含有宏观商业逻辑的抽象层次上。换言之,复用的焦点发生了”倒转”。发生复用焦点的倒转并不是因为实现细节的复用不再重要,而是因为这些细节上的复用往往已经做得很好,而且抽象层次是比这些细节更值得强调的复用焦点,因为它们是在提高复用的同时保持和提高可维护性的关键。因此在面向对象的设计里面,可维护性的复用是设计原则和设计模式的基础。
恰当的提供系统的可复用性,可以提高系统的可扩展性。允许一个具有同样接口的新的类代替旧的类,是对抽象接口的复用,客户端依赖于一个抽象的接口,而不是一个具体的实现类,使得这个具体类可以被另一个具体的类取代,而不影响客户端。
那么有哪些常用的设计原则呢?
“开-闭“原则(Open-Closed Principle,或者OCP)
里氏代换原则(Liskov Substitution Principle,或者LSP)
依赖倒转原则(Dependency Inversion Principle,或者DIP)
接口隔离原则(Interface Segregation Principle,或者ISP)
组合/聚合复用原则(Composition/Aggregation Principle,或者CARP)
迪米特法则(Law of Demeter,或者LoD)
最有以老子的一句“天下有道,却走马以粪,天下无道,戎马生于效”
来暂为本部分的概括画上一个逗号,下面再详细介绍这几种设计原则。
第三部分(常用设计模式):
本书中把设计模式大致分为三类:
◆ 创建模式(Creational Pattern),是对类的实例化过程的抽象化。一些系统在创建对象时,需要动态地决定怎样创建对象,创建那些对象,以及如何组合和表示这些对象。创建模式描述了怎样构造封装这些动态的决定。
创建模式分为类的创建模式和对象的创建模式两种。
△ 类的创建模式 类的创建模式使用继承关系,把类的创建延迟到子类,从而封装了客户端将得到那些具体类的信息,并且隐藏了这些类的实例是如何被创建和放在一起的。
△ 对象的创建模式 而对象的创建模式则把对象的创建过程动态地委派给另一个对象,从而动态地决定客户端将得到那些具体类的实例,以及这些类的实例是如何被创建和组织在一起的。
常见的创建模式:简单工厂模式,工厂方法模式、抽象工厂模式,单例模式,多例模式,建造模式,原始模型模式。
◆ 结构模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构,结构模式描述两种不同的东西:类与类的实例,根据这一不同,结构模式可以分为类的结构模式和对象的结构模式两种。
● 类的结构模式 类的结构模式使用继承来把类、接口等组合在一起,以形成更大的结构,当一个类从父类继承并实现某接口时,这个新的类就把父类的结构和接口的结构结合在起来。类的结构模式是静态的。一个类的结构模式典型的例子,就是类形式的适配器模式。
● 对象的结构模式 对象的结构模式描述怎样把各种不同类型的对象组织在一起,以实现新的功能的方法。对象的结构模式是动态的。
一个典型的对象的结构模式就是代理人模式。
常用的结构模式包括:适配器模式,缺省适配器模式,合成模式,装饰模式,代理模式,亨元模式,门面模式,桥梁模式等。
◆ 行为模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。行为模式不仅仅是关于类和对象的,而且是于它们之间的相互作用的。行为模式分为类的行为模式和对象的行为模式。
● 类的行为模式 类的行为模式使用继承关系在几个类之间分配行为。
● 对象的行为模式 对象的行为模式则使用对象的聚合来分配行为。
常用的行为模式:不变模式,策略模式,模板方法模式,观察者模式,迭代子模式,责任链模式,命令模式,备忘录模式,状态模式,访问者模式,解释器模式,调停者模式等。