java设计模式
通过学习设计模式总结和分析现有的学习文档发现以下问题:
所有的学习文档要么太高深要么就是模式而模式完全不懂
有的文档是翻译,读完一遍其实就是加深印象
有的文档是类比,用生活中的例子来类比,但是对于初学者来说是真的不知所云
所本人总结自己的学习经验来让初学者尽快的入门。对于每个人来说,知识不重要,重要的是这个知识是否提高了你的思想。是否能让你顿悟。
我的观点:23个设计模式就是 设计原则+元模式 的组合。
以下是我的文档的思路
1、原则的理解 : 总纲-横纵思维-实践办法
2、怎样记忆理解23个设计模式:本质分析记忆
3、设计模式中的基本构架单元:元模式
4、用自己的理论进行模式分析:牛刀小试
设计模式的原则
设计模式六大原则(1):开闭原则
设计模式六大原则(2):里氏替换原则
设计模式六大原则(3):依赖倒置原则
设计模式六大原则(4):接口隔离原则
设计模式六大原则(5):迪米特法则
设计模式六大原则(6):单一职责原则
如果像其他文章一样死记硬背那就悲催了,我们要理解这几个原则是在说什么,而且你要知道23个设计模式都是这个6个原则的实践。
类比一下: 人
我们要怎样设计一个人那? 用面向对象的设计方式来类比的话,首先要有原则。就是规定具有什么原则的才是人。 如:有眼睛,耳朵,头,身子,会说话等等。这些就是原则。
那么到具体的人的时候由于各种因素的影响又会有不同的展示形式,比如:黑种人,黄种人,白种人。等等。这就好比是23个设计模式,他们都是为了具体的问题而进行设计的,所有会有不同的结构方式,但是他们总是原则的提现。
怎样学习原则
通过上面的类比,我们知道了设计原则和23个模式的关系。那么我们怎样理解这些设计原则那?
这个就要说说自己个人的理解了。我是这样想的,通常当我们对一些事物了解掌握之后就会归纳分析一下经验,这些经验就可以对我们以后做的事情进行理论指导,就行修桥一样,有一套的设计方式。下面就是我对设计模式原则的理解。
: 首先我们要设计一个事物,可定要有一个总纲,这个总纲就是 **开闭原则** 他要求我们在设计的时候要对新增开发对修改关闭。
: 有了总纲,那我们具体要怎样设计一个对象那?这应该是和美术一个样,要画一样东西,我们要从整体对整个事物进行横纵比例分割怎样组比例的划分是合理的。同样 设计原则也是从 **横纵** 来个方面来进行约束的。
纵: 里氏替换原则+依赖倒置原则 这个两个原则是对纵向的要求。
横: 接口隔离原则+迪米特法则 这个两个原则是对横向的要求。
还有一个合成复用原则:多用聚合少用继承实现,那是对 **横** 在实际操作的时候的建议。
至于你同不同意我的观点,你可以自己进行思索,想出套自己的理论,那才是学习。
以上就是我对设计原则的理解。
1
2
3
4
5
6
7
8
9
10
11
23个设计模式的理解
首先是记忆这个23个设计模式,我的理解也基本是从我自己认为的本质来理解23个设计模式都在解决什么问题
对象的创建
1、对象的产生,我的理解是有 不创建,创建一个,创建多个来理解。
创建个数 简单 复杂
不创建 工厂方法模式
创建一个 单利模式 建造者模式
创建多个 原型模式 抽象工厂模式
对象构建
1、对象的构建。我是从分析对象本身来说的。对象要 有属性 有方法 有位置 有数量,既然有这几方面的问题,那设计模式就会针对这个几个问题或者两两组合出现的问题进行解决。
对象属性 值/内容 个数变化
属性 享元模式
方法 装饰模式 适配器模式
位置 代理模式
数量 组合模式 外观模式
桥接模式 可以解决 属性和方法都变化的情况
值/内容: 是指对象在操作的数据
个数变化:是在 属性、方法、位置、数量本身。
对象行为
3、对象的行为可以同他们给人的运动形式来记忆
类型 线路形状 模式
规则 线型 命令模式
双线型 备忘录模式
圆型 迭代器模式
链型 责任链模式
树型 解释器模式
伞型 观察者模式
星型 中介者模式
不规则 有型 模板方法模式
访问者模式
无型 状态模式
策略模式
理解23中操作模式的元模式
就像数学一样任何一个复杂的公式都是有基本的运算符构建起来的,+-*/等等。
23个设计模式也是一样的,他们就像是公式。我要了解构建出这个23个设计的模式的基本操作单位的含义。
(图中没有画依赖的箭头是因为我决定依赖关系比较弱,用这两个全权代表了)
这图片包含了许多隐含的信息,我给大家说一下这里我们可以看到 有三个基本的构建单位
1、抽象了类
2、接口
3、实体对象
首先:那么你需对这三种类型的对象有一个本质的理解。
重要: 比如-抽象类可以延至方法实现,那么工厂方法,模板模式就是利用了这一点。
重要: 比如-有些设计模式必须要用抽象类而不能用接口,是因为抽象类可以聚合其他类,但是接口不行。等等。
其次:三个对象间的互相关系
重要: 1、实体对象聚合接口(抽象类),那么他的目的是:实体对象需要接口(抽象类)提供解决方法,或者对象本身要传递到接口(抽象类)中。比如:策略模式,状态模式等,观察者模式(类似)。
重要: 2、实体对象(基本是抽象类的子类)聚合抽象类,那么他的目的是可以访问自己的同事类(实现接口的子类)。比如:组合模式等。
重要: 3、抽象了聚合自己,基本是对子类进行为的构建。比如:责任链模式。
重要: 4、抽象类聚合抽象类,和1查不到。只不过是问题的等级不同。应为是抽象类所以问题应该是更普遍一些。例如:桥接模式。
其实说白了就是要知道 ,一个类聚合另一类有可能要干嘛,这我认为是设计设计模式的基本操作单位
这个类是 实体对象,抽象类,接口? 是否要利用他们自身的特点? 这些就是我说的 元模式
请你自己去细细的分析,聚合关联后也就只有那么几种操作而已
举例分析设计模式
如果你能对我以上提出的想法有认同感,那么看下面的例子应该会有共鸣的。
1、备忘录模式
我们如果自己设计备忘录模式,我们按照上面的思路应该是怎样来设计那?
1.1、原则
纵向上:我们要采用原则的123条,针对接口进行设计。
横向上:我们要采用原则的456条,针对职责进行设计。
当然,你可定要了解备忘录这业务是什么东东。就是要将运行时的数据进行备份保存以便需要时进行恢复。
1.1、具体设计
默认坑定是这对接口进行设计了,那么剩下的就是利用456条了。
456归纳起来就是接口要功能单一,对象间交换要少,各个有各自的职责。那么对应备忘录的业务,我们需要进行如下的划分:
职责:产生数据的对象,保存数据的对象。
那么经过上面的分析其实应该是完成了这个模式的设计,但是在实际情况中,会有大量的数据要进行保存备份,这个也是一种频繁业务,那么他应该也要有专门负责的。所以要有一个专门进行备份管理的对象。
所以,产生数据对象+保存数据对象+管理数据对象 就是这个模式所要构建起来的。
构建:根据我说的元模式 对像进行构建 可以肯定的是
数据管理对象 要聚合 保存数据对象
产生数据的对象 要持有 保存数据对象
经过上面的分析 备忘录模式的本质你应该是有了解了。
结语
如果你经过上面的学习,再看设计模式的时候更容易理解和分析,那么我的目的就到达了。
建议:你可以看着其他的设计模式,来用我的理论进行分析,看看是否对你有帮助。如果还是不能让你理解设计模式,那我建议你下工夫自己研究一下,建立一个自己的思想体系。谢谢!。
---------------------
|
|