![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
chenlisong2015
读万卷书,行万里路。
展开
-
设计模式之单例模式03
设计模式之单例模式03这个模式是很有意思,而且比较简单,但是我还是要说因为它使用的是如此的广泛,如此的有人缘。单例就是单一、独苗的意思,那什么是独一份呢?你的思维是独一份,除此之外还有什么不能山寨的呢?我们举个比较难复制的对象:皇帝中国的历史上很少出现两个皇帝并存的时期,是有,但不多,那我们就认为皇帝是个单例模式,在这 个场景中,有皇帝,有大臣,大臣是天天要上朝参见皇帝的,今天参拜的皇帝应该和昨天原创 2016-09-19 11:43:46 · 287 阅读 · 0 评论 -
设计模式之命令模式11
设计模式之命令模式11背景正常做一个项目,有客户,需求组,美工组,开发组。然后项目经理负责统筹整个项目的进度和安排。这时,客户找到项目经理说任何一个事情,增加需求,删除需求,增加页面,修改页面等等。这样就造就了命令模式类图代码实现首先要定义各个组的抽象类public abstract class Group { public abstract void add(); public abs原创 2016-09-26 12:02:27 · 278 阅读 · 0 评论 -
设计模式之装饰者模式12
设计模式之装饰者模式12背景有一次考试,小明考了60分,然后学校出了一个成绩单,要家长签字。60分,王老汉肯定不签字。这时,需要加两个装饰。1:最高分是70分,我考了60分。 2:我排名从40到30名。类图代码实现学校给的报告单public abstract class SchoolReport { public abstract void report(); public abst原创 2016-09-26 14:24:47 · 284 阅读 · 0 评论 -
设计模式之状态模式19
设计模式之状态模式19背景项目中会遇到各种各样的状态流转,比如,电梯的“打开”,“关闭”,“运行”,“停止”状态。同一时刻只会有一个状态。例如,打开状态,可以打开,关闭,而不能运行和停止。如果正常的写法,将会写很多的switch来判断。 我们用状态模式来实现一下。类图代码实现先把四个状态抽象一下。/** * 状态的抽象 * @author ChenLisong * */public ab原创 2016-10-12 00:51:40 · 263 阅读 · 0 评论 -
设计模式之原型模式20
设计模式之原型模式20背景当我们发送邮件的时候需要模板来设置一些固定的东东。用到Template。然而,我们在发送时,一个Mail对象被发送多次,为了提升速度需要用到多线程来处理,这时就会有对象数据不安全。这时用到了Cloneable接口来解决这个问题。类图代码实现定义一个模板类public class AdvTemplate { private String subject = "中奖拉,中原创 2016-10-12 22:21:04 · 248 阅读 · 0 评论 -
设计模式之桥梁模式10
设计模式之桥梁模式10背景假如某老板有一房地产公司公司,专门卖房赚钱。另外最近ipod,衣服等赚钱,老板想开个专门山寨的各种公司。但是,老板只关注赚钱。具体的生产,销售,老板不管。类图代码实现首先定义一个产品Product.java,可以被房地产,山寨等产品继承。//定义一个产品public abstract class Product { //生产产品的动作 public abst原创 2016-09-25 21:26:21 · 274 阅读 · 0 评论 -
设计模式之组合模式14
设计模式之组合模式14背景迭代器模式pass,因为迭代器模式是在jdk1.2出现Iterator时的模式。对于现在用List,Map遍历即可搞定。一个组织架构图,上至CEO,下至普通开发人员,有这样的一个树结构,我们用组合模式来实现类图代码实现将对象抽离为以下几种员工信息抽象类,大家都有的信息,叶子节点,普通开发, 非叶子节点,组长,管理层客户端调用抽象信息类public abstract原创 2016-09-28 11:30:25 · 240 阅读 · 0 评论 -
设计模式之中介模式21
设计模式之中介模式21背景当有多个对象之间相互调用时,生成一个中介来协调处理各个类。举例:销售,采购,库存。销售时,如果有库存则销售,没库存则采购在销售。抽象中介者(Mediator)角色:抽象中介者角色定义统一的接口用于各同事角色之间的通信。具体中介者(Concrete Mediator)角色:具体中介者角色通过协调各同事角色实现协作行为,因此它必须依赖于各个同事角色。同事(Colleague)角原创 2016-10-13 19:19:36 · 294 阅读 · 0 评论 -
设计模式之观察者模式15
设计模式之观察者模式15背景李斯,张斯是不同国家的当权者,需要监控韩国韩非子的一举一动。韩非子所有的动作都要给李斯,张斯发送报告。然后再报告给各自的老大。类图代码实现定义一个Watcher接口,方便观察者实现。也方便程序自动找到所有实现该接口的类。import java.util.Observer;public interface Watcher extends Observer{}然后再定义一个原创 2016-09-29 17:44:02 · 307 阅读 · 0 评论 -
设计模式之解释器模式22
设计模式之解释器模式22背景当我们需要计算a+b-c时,我们需要第一步,定义这个表达式,赋予其逻辑。然后将变量填充,得出结果。我们现在用程序来理解它。类图代码实现表达式的抽象类public abstract class Expression { //解析公式与数值,其中var中的key值是公式中的参数,value值是具体的数字 public abstract int interpret原创 2016-10-16 23:53:57 · 256 阅读 · 0 评论 -
六大设计原则之单一职责
六大设计原则之单一职责定义单一职责原则:应该有且仅有一个原因引起类的变化例如 接口:IUserInfo(setUserName(),setPassword(),deleteUser(),addRole()) 就是违背了单一原则。用户的属性和行为没有分开。 应该这样 用户的属性:IUserBo(setUserName(), setPassword()) 用户的行为:IUserBiz(dele原创 2016-10-17 23:44:19 · 284 阅读 · 0 评论 -
OOD设计原则之开闭原则(OCP)
OOD设计原则之开闭原则(OCP)开闭原则OCP(open-close-principle)在维基百科的定义:在面向对象编程中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变他的源代码的前提下变更他的行为。梅耶开闭原则勃兰特丶梅耶一般被认为是最早提出开闭原则这一术语的人,1988年在面向对象软件构造中给出,这一想法认为一旦完原创 2016-09-22 16:17:58 · 361 阅读 · 0 评论 -
设计模式之建造者模式10
设计模式之建造者模式09背景如果客户不仅要制造出宝马, 奔驰的车型。还要动态的设置他们去做什么。现有的动作(启动,引擎声,鸣笛,停止)。客户可以定义宝马有启动,停止。而奔驰有启动,引擎声,停止。这时该如何来做?类图将功能区分为车型和车型的建造者。建造者通过自定义sequence来控制各自的车型的动作。不同的车型拥有不用的建造者。代码实现定义一个车型的抽象类public abstract class原创 2016-09-23 12:49:31 · 265 阅读 · 0 评论 -
设计模式之多例模式04
设计模式之多例模式04背景这种情况有没有?有!大点声,有没有? 有!,是,确实有,就出现在明朝,那三国期间的算不算,不算,各自称帝,各有各的地盘,国号不同。估计当上皇帝后乐疯了,忘记把老哥朱祁镇削为太上皇了,我 Shit,在中国的历史上就这个时期是有 2 个皇帝,你说这期间的大臣多郁闷,两个皇帝耶,两个精神依附对象呀。这个场景放到我们设计模式中就是叫有上限的多例模式(没上限的多例模式太容易了,和你直原创 2016-09-19 15:14:08 · 264 阅读 · 0 评论 -
设计模式之代理模式02
设计模式之代理模式02介绍什么是代理模式?我很忙,忙得没空理你,那你要找就先找我的代理人吧,那代理人总要知道被代理人能做不能做哪些事吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活啊。 比如西门庆,潘金莲,那潘金莲不好意思答复啊,咋办,找王婆做个代理,实现先定义一种女人类型,王婆和潘金莲都属于这个类型/** * 定义一种女人类型,王婆和潘金莲都属于这种类型 * @a原创 2016-09-18 11:50:40 · 285 阅读 · 0 评论 -
设计模式之策略模式01
设计模式之策略模式01背景举例说明策略模式刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,还真是解决了大问题,摘到最后赔了夫人又折兵,那我们先看下场景有是什么样子的。分析先说下场景中的要素:三个锦囊,一个赵云,妙计是小亮同志给的,妙计是安放在锦囊中的,俗称锦囊妙计,赵云是一个干活的人,从锦囊中取出妙计,执行,然后获胜,用Java画出类图如下 实现三个妙计原创 2016-09-18 11:27:27 · 353 阅读 · 0 评论 -
设计模式之工厂模式05
设计模式之工厂模式05目标 女娲补天的故事大家都听说过吧,今天不说这个,说女娲创造人的故事,可不是“造人”的工作,这个词被现代人滥用了。 这个故事是说,女娲在补了天后,下到凡间一看,哇塞,风景太优美了,天空是湛蓝的,水是清澈的,空气是清新的,太美丽了,然后就待时间长了就有点寂寞了,没有动物,这些看的到都是静态的东西呀,怎么办? 别忘了是神仙呀,没有办不到的事情,于是女娲就架起了八卦炉(技术术语:建立原创 2016-09-20 11:54:38 · 302 阅读 · 0 评论 -
设计模式之抽象工厂模式06
设计模式之抽象工厂模式06背景好了,我们继续上一节课,上一节讲到女娲造人,人是造出来了,世界时热闹了,可是低头一看,都是清一色的类型,缺少关爱、仇恨、喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋, Shit!忘记给人类定义性别了,那怎么办?抹掉重来,然后就把人类重新洗牌,准备重新开始制造人类。由于先前的工作已经花费了很大的精力做为铺垫,也不想从头开始了,那先说人类(Product 产原创 2016-09-20 15:56:34 · 306 阅读 · 0 评论 -
设计模式之责任链模式17
设计模式之责任链模式17背景古代之三从四德,未婚从父,已婚从夫,丧父从子。女子如果想去逛街,先得请示父亲,如果父亲不在则请求丈夫,如果丈夫不在则请求儿子。抽象一下表达。对象拆分:女人(女子),男人(父亲,丈夫,儿子),动作拆分:男子批准女子的逛街请求。男子对象拥有该动作。(基于,谁拥有动作,方法则属于那个对象)类图代码实现抽象女子接口public interface IWoman { //获取原创 2016-10-09 21:34:12 · 380 阅读 · 0 评论 -
设计模式之门面模式07
设计模式之门面模式07背景大家都是高智商的人,都写过纸质的信件吧,比如给女朋友写情书什么的,写信的过程大家都还记得吧,先写信的内容,然后写信封,然后把信放到信封中,封好,投递到信箱中进行邮递,这个过程还是比较简单的,虽然简单,这四个步骤都是要跑的呀,信多了还是麻烦,比如到了情人节,为了大海捞针,给十个女孩子发情书,都要这样跑一遍,你不要累死,更别说你要发个广告信啥的,一下子发 1 千万封邮件,那不就原创 2016-09-21 18:23:01 · 275 阅读 · 0 评论 -
设计模式之访问模式18
设计模式之访问模式17背景如果希望能打印出所有员工的信息(普通员工,经理)。普通的模板方法可以实现。现在尝试下访问模式。拆分对象:员工,普通员工,经理,访问类(集中访问信息的操作)类图代码实现、定义一个员工抽象类,所有角色都继承该类。public abstract class Employee { private String name; private Double salary;原创 2016-10-11 00:32:53 · 313 阅读 · 0 评论 -
设计模式之抽象适配器模式08
设计模式之抽象适配器模式07背景我们系统中的用户设计是IUserInfo(name,mobile,address),而这时要接入别的项目的用户数据。要做到的程度:既能查询到我们的数据,也能查询到别的系统的用户数据。而这时,对方系统用户设置了基础信息,家庭信息。数据结构不一致,我们做个适配器解决之。类图代码实现我们系统中的用户接口/** * 内部系统用户接口 * @author chenlison原创 2016-09-22 17:57:29 · 297 阅读 · 0 评论 -
设计模式之抽象模板模式09
设计模式之抽象模板模式08背景有一个车辆模型,然后需要录入各种不同类型的车。 写一个抽象类,CarModel 剩下的所有具体的车型都将继承CarModel类图如下代码实现定义车的模型抽象类,其中run方法调用子类的实现public abstract class CarModel { public abstract void start(); public abstract void原创 2016-09-23 11:46:37 · 248 阅读 · 0 评论 -
六大设计原则之里氏替换原则
六大设计原则之里氏替换原则定义第一个定义: 如果对每一个类型为 T1 的对象 o1,都有类型为 T2 的对象 o2,使得以 T1 定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。 第二个定义: 通俗点讲只要父类能出现的地方我子类就可以出现,而且调用子类还不产生任何的错误或异常,调用者可能根本就不需要知道是父类还原创 2016-10-18 17:56:21 · 311 阅读 · 0 评论