
设计模式
谢宇寒
这个作者很懒,什么都没留下…
展开
-
设计模式之中介者模式-你的系统内部效率低嘛(Mediator)
问题中介者模式和外观模式有些类似,学习中介者模式可以和外观模式对比着一起学习。可以参考设计模式之外观模式-与单一职责的PK(Facade)。下图是我总结的外观和中介者的区别。外观模式解决的是顾客频繁访问店内的各个部门的问题,增加接待经理,由接待经理来接待顾客,同时也由接待经理来与店内各个部门进行沟通处理。中介者解决的是店内各个部门频繁交互访问的问题,新增一个协调部门或者总经理担任中介者的角色,来协调各个部门频繁访问的问题。废话不多说,我们来描述我的电脑城新的问题。我的电脑城现在有4个采购部,分别是A,原创 2020-08-19 14:05:50 · 144 阅读 · 0 评论 -
设计模式之迭代器模式-消灭傻瓜遍历(Iterator)
问题迭代器模式其实很好理解,不过我还是举一个我的电脑城的问题来引入吧。话说我的仓库存了50台电脑,今天的打算给我的企业客户运送过去。卡车司机到仓库门口说来运50台电脑,管理员跟司机说:你再仓库的西南角搬20台,再到中间区域搬10台,再到北边搬10台,再到东边搬10台。说完司机就怒了,说你想累死我啊,你就一台一台往仓库门口放,我就一台一台往车上运,其他的我不管。这就是迭代器模式!实现先看下电脑的实现,加个index,标明序号public class Computer { private in原创 2020-08-18 13:45:07 · 131 阅读 · 0 评论 -
设计模式之命令模式-命令之下出效率(Command)
问题我的电脑城的有多个销售经理,有一个配件管理员。之前的模式是销售经理接待客户,客户提出需求,销售经理告诉配件管理员,例如三星1t固态硬盘一个,罗技键盘一个等等。配件管理员记录之后,从仓库拿出配件,再交付给对应客户。这样就出了个问题,在忙的时候,一个管理员需要对多个销售经理,然后需求不同,记录并取货,还有的时候,客户定下来之后又后悔了,不要了或者想换个别的,管理员就被销售经理给折腾疯了,根本不知道哪些是需要的,哪些是不需要的,还经常拿错了配件给到客户。这样下去可不行啊,乱糟糟的流程导致员工们经常出错。这就原创 2020-08-17 14:57:02 · 190 阅读 · 0 评论 -
设计模式之状态模式-消灭switch,case(State)
问题电脑城开始不满足于仅仅销售数码产品,着手研发产品。前期的话,先研发一些比较简单的产品,分别是台灯和电视。台灯的设计:在关闭状态下,点击开关按钮,从弱光—>强光—>关闭。电视的遥控器设计,在关闭状态下,点击开关按钮,打开电视,点击其他按钮,显示红灯,提示未开机。在开机状态下,点击开关按钮,关机,点击其他按钮,执行对应操作。如果不做任何考虑的话,可以在点击按钮时,判断当前状态,根据状态的不同来决定执行对应的操作。我们先来看看状态模式如何解决上述问题,再来看看其优劣。实现先看台灯的实现pu原创 2020-08-13 13:48:05 · 1748 阅读 · 0 评论 -
设计模式之观察者模式-节约资源就靠它(Observer)
问题最近出的华为mate x卖的非常火爆,常常出现断货的情况。有些顾客为了买到mate x,每天都往店里跑来咨询是否有货,顾客很辛苦;当到货的时候,很多顾客没有来买,我只能挨家挨户的通知所有人到货了,你们快来买,店员很辛苦。既然这么辛苦的话,我们就相互减轻一点工作量。这就引入我们的观察者模式简介上述问题中描述的两种情况,都是计算机中常见的情形。了解的朋友一下就能知道,一个是轮询,另一个是广播。而轮询和广播都是非常消耗资源的(顾客和店员都很辛苦),在非必要的情况下,当然是尽量时避免轮询和广播的。而观察者原创 2020-08-12 11:33:52 · 131 阅读 · 0 评论 -
设计模式之责任链模式-单一职责的完美诠释(chain of responsibility)
问题责任链模式的引入需要从外观模式和代理模式引入,我们因为不希望顾客不停的和不同部门和人员打交道,设置了接待经理,由接待经理统一负责。又因为接待经理可能会过于繁忙,所以给他请了秘书,代理其工作,减少无谓的交互。即便这样,接待经理仍然忙不过来,就思考给他减负。那么想到的就是其实对于组装电脑的流程是固定的,无需接待经理在中间和各个部门交互,可以固定收银人员收银后交给组装人员组装,组装人员组装后,交给打包人员打包,打包人员打包之后交给接待经理,由接待经理交给顾客。这就是责任链模式简介责任链模式的思想几乎遍布原创 2020-07-28 16:26:03 · 379 阅读 · 0 评论 -
设计模式之代理模式-代理,外观傻傻分不清楚(Proxy)
问题不知道大家还记不记得外观模式中的接待经理,如果不记得的话,请参考设计模式之外观模式-与单一职责的PK(Facade)。接待经理负责和顾客沟通,同时和销售,收银,组装,打包等等对接,来提供给顾客最好的服务。但是呢,今天我需要安排他去参加一个全天会议,那店里没他可不行啊,那这怎么办呢?我只好通过代理模式来解决这个问题。简介首先我们先思考这个问题该怎么解决?我的解决方案是给他请一个秘书,一方面缓解其平时的工作压力,控制并非所有事项都去找接待经理;一方面防止其不在的时候,可以临时代理其工作。所以代理模式的原创 2020-07-17 11:18:01 · 335 阅读 · 0 评论 -
设计模式之享元模式-池技术的指导思想(Flyweight)
问题众所周知,我的电脑城以台式机高度定制出名,客户到店后经理都会根据客户的需求配置他所希望的电脑。在前期的时候,顾客量少,我们会给顾客提供的配置清单基本不会重复。但是呢,随着生意越来越好,顾客越来越多,出现重复配置的情况越来越多,但是呢,因为我们之前不存档,所以每次都需要给客户开一份新的一样的清单。对于经理来说,其实在这方面完全可以提高效率的。怎么提高呢?那就是我们的今天要聊的享元模式了。简介先总结下上面的问题:工作中会遇到大量重复的清单数据,而因为没有存档,而会导致每一次遇到清单数据时,都需要重新创原创 2020-07-16 13:56:10 · 360 阅读 · 0 评论 -
设计模式之外观模式-与单一职责的PK(Facade)
问题在我的电脑城里,为了提高效率,专门设有销售人员,收银人员,组装人员,打包人员等等。客户进来购买电脑的时候,先找销售人员,确定好组装配件,销售人员将单子给到客户,让客户拿着单子到收银人员买单,再让客户拿着收银单到组装人员那里去做配件组装。。。听起来很流畅,效率很高。但是呢,客户不高兴了,说:把你们老板给我叫出来,对着我就是一顿骂:你这老板怎么回事,我就买个电脑,你让我从这跑到那,再跑到那,累都累死了,你就这么对待上帝的嘛。我这么一想,确实是不行啊,怎么能让顾客来回跑呢。那我就使用外观模式来解决客户问题啊原创 2020-07-15 11:52:17 · 465 阅读 · 0 评论 -
设计模式之装饰者模式的应用场景(Decorator)
问题装饰者模式的问题,我想从桥接模式引入,对桥接模式不了解的可以参考设计模式之桥接模式。桥接模式解决的问题是我卖的笔记本电脑的组成例如cpu或cache有很多种类型或大小,如果使用继承的方式,会生成非常多的类,难以维护。所以使用桥接模式,将cpu或cache抽象化,在生产电脑时,再将特定类型或大小的组成部分组装到笔记本电脑中。完美!但是呢,现在又一个问题出现了,客户对电脑要求越来越高,希望可以扩展插入SSD和内存条。嗯,听到这个问题,我觉得很简单呀,在电脑中继续扩展两个组件SSD和cache。这时候发现原创 2020-06-29 18:46:59 · 2007 阅读 · 1 评论 -
设计模式之轻松理解组合模式(Composite)
问题在双11大促中,为了提高销量,我决定将华为电脑,手机,耳机等系列商品做成礼盒打包销售,初步暂定了两个礼盒:1. 华为高级礼盒:华为笔记本 + 机械键盘 + 手机礼盒,手机礼盒:手机 + 耳机 + 手表礼盒, 手表礼盒:手表 + 定制表带2. 华为基础礼盒:华为笔记本 + 无线鼠标 + 手机礼盒,手机礼盒:手机 + 手表礼盒,手表礼盒:手表销售员问我这两个礼盒如何定价,我告诉他说,把所有商品的价格加起来,打个九折就行。销售员拿着计算器吭哧吭哧算了半天,告诉我高级礼盒价值¥18000,基础礼盒价值原创 2020-06-28 16:03:26 · 293 阅读 · 0 评论 -
设计模式之桥接模式
问题不知道大家是否还记得我之前在建造者模式的时候卖的电脑,嗯,不记得也没关系,我们再来看一下。public class Computer { private String screen; private String cpu; private String keyboard; private String disk; /** * 主机 */ private String engine; private String原创 2020-06-01 14:28:53 · 238 阅读 · 0 评论 -
设计模式之适配器模式
问题前面的时候,我已经在生产华为和苹果的手机了,实际上我不仅做手机的生产,还会做手机相关的配件,比如说耳机。我在生产华为和苹果手机之前,就已经提前制造了大量的圆孔耳机。奈何,华为和苹果产品更新换代太快,新版苹果和华为手机都不再使用圆孔耳机了,华为要用type-c的耳机,苹果用lightning口耳机。这不就是坑了我这个代工厂了,我这生产的大批耳机还没用呢,就要被淘汰了!这时候,为了不至于亏损,至少要先把这批耳机卖掉之后再说,可是新款手机都不支持圆孔耳机,这怎么办呢?那就需要我们强大的适配器了!通过适配器原创 2020-05-28 19:46:18 · 275 阅读 · 0 评论 -
设计模式之单例模式
应用场景回归到之前我还是只有一家小工厂的电脑城老板的时候,顾客想买电脑的时候,我就new了个电脑工厂给他生产电脑,代码如下。在工厂模式的我们并不会在意,但是呢在单例模式的模式,我们就必须重视起来了!每次来一个顾客买电脑,我就创建了一个工厂来给他生产电脑,那我岂不是亏死了! // here comes a customer, want to buy huawei computer String customerHope = "huawei"; // i tel原创 2020-05-27 19:09:33 · 214 阅读 · 0 评论 -
设计模式之原型模式(Prototype)
简介原型模式是在平时很少会去关注的设计模式,用到的机会也不多,但是呢,我们经常能看到原型模式,那就是接口Cloneable(Java),其原理就是通过拷贝一个现有对象来创建一个和当前对象完全一样的对象。问题老规矩,我们还是通过问题来引入场景。之前,我通过建造者模式组装了一台我喜欢的电脑,这时候,我的朋友听说了,而且觉得我组装的配置很适合他,希望让我给他用同样的配置组装一台电脑,当然一种方式是我继续用建造者模式给他组装一台电脑,当然了,还有另一种方式就是使用原型模式,直接clone一台一模一样的电脑给他原创 2020-05-25 11:54:59 · 309 阅读 · 0 评论 -
设计模式之工厂方法与抽象工厂
简单工厂问题我是一个电脑城老板,并且有一家小工厂,主要用来制造华为电脑和苹果电脑,也就是销售这两款电脑。顾客来购买电脑,我该如何实现呢?解决代码public class ComputerFactory { private static final String HUAWEI_TYPE = "huawei"; private static final String APPLE_TYPE = "apple"; public Computer produceComputer(原创 2020-05-22 11:04:18 · 166 阅读 · 0 评论 -
设计模式之建造者模式
简介建造者模式在Java中是一个非常常见的设计模式,我们可以在经常看到,比如StringBuilder,HttpRequestBuilder等等。建造者模式是为了解决构造非常复杂的对象而产生的设计模式。它的作用呢是可分步创建复杂对象,并且使用相同的创建代码生成不同的对象,当然了它也保证了创建和使用分离。实现首先,举个例子,我现在想要组装一台电脑,电脑有很多部件,应该要怎么实现呢?当然啦,第一反应肯定是创建一个Computer对象,然后把部件填在里面,再new出来就好了。Computer类如下,那么我可原创 2020-05-21 16:09:39 · 177 阅读 · 0 评论