![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
大话设计模式 学习笔记
文章平均质量分 56
秋千不会坠
这个作者很懒,什么都没留下…
展开
-
大话设计模式学习笔记(1)----简单工厂模式
设计模式也是程序猿的必学技能之一。我粗略的翻了几章以后发现《大话设计模式》这本书写的挺浅显易懂的。于是就决定也连载一下这本书的学习笔记,希望能帮助到大家。大话设计模式学习笔记系列每礼拜一更新一次,看的不过瘾的可以看一下我其他连载的学习笔记呦~~ 在这系列的笔记里面,我会照这书本上的方法:先提出一个实际需求问题然后一步一步改善我们的代码,最后根据代码画一张UML图。(作者用的是C#,然而我C#只懂一原创 2017-03-27 10:00:52 · 479 阅读 · 1 评论 -
大话设计模式学习笔记(17)——适配器模式
源码git地址 https://github.com/dlovetco/designMode问题提出小明新买了一台电脑,但是发现显示器是HDMI的接口,而自己只有VGA的线。所以没办法只能再买一个转接口来连接显示器和主机。 用代码实现上述场景。适配器模式将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。pac...原创 2018-03-26 14:27:21 · 171 阅读 · 0 评论 -
大话设计模式学习笔记(18)——备忘录模式
源码git地址 https://github.com/dlovetco/designMode问题提出玩游戏的时候在打boss之前都会保存一下,如果被boss打死了还可以读档重新来过。试着用代码实现这种保存的机制。代码写到现在,相信小伙伴们都应该知道要注意一些什么事情。 比如: - 降低类与类之间的耦合性,尽量面向接口编程 - 尽可能的降低类的可见性。客户端能接触到的类越少越好(包...原创 2018-03-26 15:39:43 · 203 阅读 · 0 评论 -
大话设计模式学习笔记(19)——组合模式
源码git地址 https://github.com/dlovetco/designMode问题提出要求用代码模拟出一个树的生长(由根部慢慢往上产生树枝,再产生树叶)。根可以产生树枝和树叶;树枝可以长出树叶;树叶就不能再继续生长。组合模式将对象组合成树形结构以表示部分-整体的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。package composit...原创 2018-03-26 17:52:28 · 160 阅读 · 0 评论 -
大话设计模式学习笔记(20)——迭代器模式
源码git地址 https://github.com/dlovetco/designMode 其实迭代器模式说出来很简单,就是在java语言中的foreach遍历。只不过我们平时在用不会去深究foreach的内部算法,现在我们来自己手写一下遍历。问题提出体育老师让小明数一下有多少个同学来上体育课了。package iteratorMode;import java.util.A...原创 2018-03-26 19:17:55 · 253 阅读 · 0 评论 -
大话设计模式学习笔记(21)——单例模式
源码git地址 https://github.com/dlovetco/designMode问题提出确保一个实体类在整个程序运行中只能被实例化一次。即只能有一个该类的对象。看到这个问题,有一定编程基础的同学肯定能够想到用单例模式。本篇博客我就来写一下单例模式的5种不同的实现方法。package singleton;public class Singleton { p...原创 2018-03-27 20:52:48 · 142 阅读 · 0 评论 -
大话设计模式学习笔记(22)——桥接模式
源码git地址 https://github.com/dlovetco/designMode问题提出不同品牌的手机各不相同。同一款软件在不同手机上运行很有可能是不一样的。要求用代码实现这一种情况。题目中提到了两种不同的分类方式:一种是按品牌分类手机,然后对于每一个软件都需要两个实体类来表示不同手机运行情况不同;另外一种是先按照软件种类分,然后再根据手机品牌分。这两种分类方法都有很明显的...原创 2018-03-28 15:21:49 · 161 阅读 · 0 评论 -
大话设计模式学习笔记(23)——命令模式
源码git地址 https://github.com/dlovetco/designMode问题提出小明在一家烧烤店里吃烧烤。店里人很多,所以由服务员来负责记录客人们点了哪些菜。之后再把要烧烤的菜单拿到后厨给厨师。用代码实现小明点单的场景。普通情况下,一般都是客人直接像厨师发出请求。但是这样的坏处在于客人不能更改自己的订单,而且没有具体的记录下来菜单,不好算账。所以这个服务员类就是负责...原创 2018-03-28 16:53:15 · 257 阅读 · 0 评论 -
大话设计模式学习笔记(24)——职责链模式
问题提出小明想要请个假,但由于种种原因不得不一直向上层层传递到总经理。设请假的级别为10。组长处理的级别为1~5,经理处理的级别为6~8,总经理处理的级别为9~10。用代码实现这个请假场景。职责链模式使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递改请求,直到有一个对象处理它为止。package chainofr...原创 2018-03-28 18:29:19 · 158 阅读 · 0 评论 -
大话设计模式学习笔记(25)——中介者模式
源码git地址 https://github.com/dlovetco/designMode 有时候类与类之间的关系虽然在设计初期是相互独立的,但是随着代码量的增加很容易在类之间建立起许许多多的关系。此时再去看类图会发现此时的类图已经变成网状结构,违反了我们之前讲过的迪米特法则。解决这个问题的一种可行的办法是把网状结构改成以一个管理类中心的星型结构。问题提出以国与国之间的关系为例。所有国...原创 2018-03-29 13:08:35 · 187 阅读 · 0 评论 -
大话设计模式学习笔记(26)——享元模式
源码git地址 https://github.com/dlovetco/designMode 在项目中有可能我们会需要建立许许多多个类似的对象,这些对象之间的不同可能仅仅是参数不同。盲目地不断new会不断加重服务器负担,此时我们可以考虑复用一些对象。问题提出小明做外包要建立许多个网站。有博客类的,购物类的等等。同类的网站结构几乎差不多,不同的只是某些地方的数据,像一些账户信息,文字内容。...原创 2018-03-29 14:27:27 · 122 阅读 · 0 评论 -
大话设计模式学习笔记(27)——解释器模式
源码git地址 https://github.com/dlovetco/designMode 有时候我们会遇到这样的一个问题:客户端能够提供的参数并不是我们所需要的。在调用正确的api之前,我们需要先把客户端传进来的参数解析成我们所需要的格式。问题的提出音乐简谱中描绘乐曲用的是1234567,而实际发出的声音却是“哆瑞咪发嗦啦西”。实现一个简谱到音乐的转译系统。解释器模式给定...原创 2018-03-29 15:03:34 · 190 阅读 · 0 评论 -
大话设计模式学习笔记(16)——状态模式
源码git地址 https://github.com/dlovetco/designMode问题提出人一生有很多个时期,而不同的时期应该做不同的事情。比如童年需要开心的玩耍,青年需要认真工作,老年可以享受天伦之乐。。。用代码实现上述场景。使用switch实现package statemode;public class StateMode { public stati...原创 2018-03-26 13:39:16 · 173 阅读 · 0 评论 -
大话设计模式学习笔记(8)——工厂模式
源码git地址 https://github.com/dlovetco/designMode 我们之前学过一个简单工厂模式 ,它的特点是把switch操作从客户端拿到了工厂类(只有一个工厂)中。而我们在这里所要讲的工厂模式可以理解为为每个种类的对象建立相应的工厂类。我们还是以计算机的加减乘除为例。简单工厂方式public class Main { public static...原创 2018-03-21 19:44:43 · 129 阅读 · 0 评论 -
大话设计模式学习笔记(7)——代理模式
源码git地址 https://github.com/dlovetco/designMode问题提出请用代码实现小明通过小刚向小红送礼物(注意:不能让小红知道是小明送的礼物)public class Main { public static void main(String[] args) { ZhuiQiuZhe ming = new ZhuiQiuZh...原创 2018-03-21 15:47:00 · 240 阅读 · 0 评论 -
大话设计模式学习笔记(2)----策略模式
上篇我们学习了简单工厂模式,想必大家如果按照我写的步骤一步一步下来的话肯定会有印象(尤其是像我一样刚刚接触设计模式的小白白们)。这次我们继续学习策略模式,例子还是用作者给的吧~问题提出:需要设计一个商场的收银软件,营业员根据用户购买商品的单价和数量来计算总额。(考虑商场有多个促销活动(打折活动,满减活动)等,且由于我们是用java写的,写图形化界面不方便,所以把main方法看作是客户端...原创 2017-04-02 16:19:34 · 350 阅读 · 1 评论 -
大话设计模式学习笔记(6)——装饰模式
问题提出为一个模特穿衣服。要求根据用户的需求能够有不同的装扮。(注意要符合我们的几个原则——依赖倒转,开放闭合,单一职责等)。原创 2017-04-30 09:18:05 · 457 阅读 · 0 评论 -
大话设计模式学习笔记(3,4,5)----单一职责,开放-封闭,依赖倒转,里氏代换原则
由于第3,4,5章讲的是设计模式里面的几个原则,没有讲具体的设计模式,所以我这里就把这三章放在一起写了。不过虽然篇幅短但是由于是原则,这些可是非常重要的。原则性的东西一只手都能数的过来,但是想要完全搞懂并且应用起来其实也是非常困难的,这比我们简单的学习一个设计模式要来的长久。一个好的设计模式必然也会符合这几个设计原则。原创 2017-04-24 15:58:40 · 370 阅读 · 0 评论 -
大话设计模式学习笔记(9)——原型模式
源码git地址 https://github.com/dlovetco/designMode问题提出使用最简单的方法建立出多个相同的复杂对象(以水果为例,创建5个红色的重量为1kg的水果)。看到这个问题,熟悉java的童鞋可能立马会想到一个东西——克隆。没错,java自身提供用于克隆(深拷贝)的api**Cloneable接口**。自己写的类如果要使用Object的clone()方法,...原创 2018-03-22 18:21:47 · 164 阅读 · 0 评论 -
大话设计模式学习笔记(10)——模板方法模式
源码git地址 https://github.com/dlovetco/designMode问题提出老师在黑板上写了一套试卷,需要小明和小刚两个人做试卷。请用尽可能简洁的代码模拟出这个场景。最简单无脑的做法public class TemplateMode { public static void main(String[] args) { Min...原创 2018-03-22 19:05:12 · 195 阅读 · 0 评论 -
大话设计模式学习笔记(11)——迪米特法则
这一篇比较水 只是介绍这样一个法则:迪米特法则如果两个类不必彼此通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。简而言之,不相关的类之间就应该没有可见性。如果非要调用,可以通过代理模式。实质强调的就是低耦合。...原创 2018-03-22 19:14:06 · 161 阅读 · 0 评论 -
大话设计模式学习笔记(12)——外观模式
源码git地址 https://github.com/dlovetco/designMode提出问题一个工人控制着一块区域的电路,他的工作是去管理电路上的开关。请用代码实现这一场景。简单实现package facade;public class Facade { public static void main(String[] args) { S...原创 2018-03-22 20:00:47 · 160 阅读 · 0 评论 -
大话设计模式学习笔记(13)——建造者模式
源码git地址 https://github.com/dlovetco/designMode问题提出捏两个小人一个胖一个瘦。必须要有头 身体 四肢。这个场景的主要特点在于我们需要保证这个小人的稳定性, 即必须保证有客户端在建造小人的时候有头 身体 四肢三个部分。所以把各个部分的建造放在客户端一定是不合适的(客户端执行的代码越多,越容易出错)。建造者模式package b...原创 2018-03-22 21:01:23 · 187 阅读 · 0 评论 -
大话设计模式学习笔记(14)——观察者模式(发布-订阅模式)
源码git地址 https://github.com/dlovetco/designMode问题提出同学们都在上自习课,老师没人所以开始纷纷玩起来。坐在门口的同学需要完成望风任务,即发现老师回来的时候要告诉全班同学不要玩了,继续上自习。要求用代码实现上述场景。由上述问题,我们可以定义两个角色:望风的同学(小明),玩耍的同学(小刚和小红)。 先举一个简单的高耦合的例子。高耦合代...原创 2018-03-23 15:40:27 · 218 阅读 · 0 评论 -
大话设计模式学习笔记(29)——设计模式总结
各种模式样例代码git地址:https://github.com/dlovetco/designMode 例子与博客中的问题配套创建型模式创建型模式隐藏了这些类的实例是如何被创建和放在一起,整个系统关于这些对象所知道的是由抽象类所定义的接口。这样创建性模式在创建了什么,谁创建它,它怎么被创建的以及何时创建这些方法提供了很大的灵活性。简单工厂简单工厂不符合开放封闭原则:每新增加一...原创 2018-03-30 16:02:23 · 258 阅读 · 0 评论 -
大话设计模式学习笔记(15)——抽象工厂模式
源码git地址 https://github.com/dlovetco/designMode 前面我们学过简单工厂,工厂方法两种“工厂”有关的设计模式。今天让我们来看看这个抽象工厂是怎么回事。问题提出小明和小红是夫妻,他们决定在装修的时候提出两种室内设计。因为谁也不能说服谁,所以这两种设计都要保留,不到最后一刻都说不准采用哪一种方法。此外需要小红和小明都给出一个装修模型。要求用代码实现...原创 2018-03-25 21:00:26 · 157 阅读 · 0 评论 -
大话设计模式学习笔记(28)——访问者模式
源码git地址 https://github.com/dlovetco/designMode 这个是最后一个也是最难的设计模式啦。估计看到这里的同学们一定像我一样把以前学过的28个设计模式忘得差不多了,下一篇我们就会总结一下我们学过的所有设计模式。问题提出请用面向对象的方式表明: 男人成功的时候背后有个伟大的女人, 女人成功的时候背后有个不成功的男人, 男人失败时闷头喝酒 女人失...原创 2018-03-29 16:05:11 · 213 阅读 · 1 评论