
设计模式
文章平均质量分 62
学习设计模式的探索之路,案例采用Java进行实现
James-Tom
微信公众号:一粒尘埃的漫旅。
里面有很多想对大家说的话,就像和朋友聊聊天。
写代码,做设计,聊生活,聊工作,聊职场。
我见到的世界是什么样子的?
一个普通人的世界。
搜索关注我吧。
##一粒尘埃的漫旅 ## @一粒尘埃的漫旅
展开
-
(二十四)设计模式-抽象工厂模式
1、定义(Abstract Factory)提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。2、使用场景一个项目,早期使用的数据是Sql Server,但是现在需要切换数据Access,甚至到了后期可能需要换成Oracle,相应的对应的查询插入删除等方法需要做出调整。需要找出最佳解决办法适应各种数据库,且改动较小,易于扩展,耦合性底。3、代码结构UML图4、类的实现...原创 2020-02-25 14:55:25 · 174 阅读 · 0 评论 -
(二十三)设计模式-工厂方法模式
1、定义(Factory Method)定义一个用于创建对象的接口,让之类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其之类。2、使用场景加减乘除运算,延续简单工厂模式继续封装。3、代码结构UML图抽象工厂:将工厂抽象出来一个接口;加法工厂:具体的工厂类;运算类:运算操作抽象类;加减乘除类:具体的运算类。4、类的实现(1)、AddFactory、SubFactory 、...原创 2020-02-25 11:47:52 · 214 阅读 · 0 评论 -
(二十二)设计模式-简单工厂模式
1、定义用一个单独的类来做这个创造实例的过程,这就是工厂。2、使用场景加减乘除运算封装3、代码结构UML图简单工厂类:实例工厂类;运算类:运算操作抽象类;加、减、乘、除法类:具体的运算类。4、类的实现(1)、Operation(运算抽象类)public class Operation { private double numberA = 0; private ...原创 2020-02-25 10:47:18 · 145 阅读 · 0 评论 -
(二十一)设计模式-模板方法模式
1、定义(Template)定义一个操作中的算法的骨架,而将一些步骤延迟到之类中。模板方法使得之类可以不改变一个算法的机构即可重定义该算法的某些特定步骤。2、使用场景学生甲和学生乙两个抄试卷标题,然后各自提交不同的答案,同时老师可以更改题目,而不影响学生答题。3、代码结构UML图金庸小说考题试卷:实现了一个模板方法,定义了算法的骨架,具体之类将重定义PrimitiveOperation...原创 2020-02-24 14:40:30 · 307 阅读 · 0 评论 -
(二十)设计模式-外观模式
1、定义(Facade)为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口是的这一子系统更加容易使用。2、使用场景散户投资情况,为了降低风险而购买了基金,专业的基金经理人会去购买一些股票,国债、房地产等。3、代码结构UML图客户:客户端类,调用。基金:Facade外观类,知道哪些子系统负责处理请求,将客户的请求代理给适当的子系统对象。股票一、二、三,国债一,...原创 2020-02-24 12:20:49 · 147 阅读 · 0 评论 -
(十九)设计模式-原型模式
1、定义(Prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。2、使用场景简历的复印,拷贝所有简历上的内容,复印到其他A4纸上。3、代码结构UML图简历:具体原型类,实现一个克隆自身的操作;工作经历:一个普通的类,为了实现深复制,实现ICloneable接口。4、类的实现(1)、Resume(简历类)public class Resume imp...原创 2020-02-24 11:19:28 · 216 阅读 · 2 评论 -
(十八)设计模式-状态模式
1、定义(State)当一个对象的内在状态改变时允许变其行为,这个对象看起来像是改变了其类。2、使用场景9点 上午工作 ,精神百倍10点 上午工作,精神百倍12点 饿了,午饭,犯困,午休13点 下午状态还不错,继续努力14点 下午状态还不错,继续努力17点 加班额,疲劳至极19点 加班额,疲劳至极22点 不行了,睡着了具体案例演变过程可参考书上3、代码结构UML图工...原创 2020-02-22 22:30:42 · 221 阅读 · 0 评论 -
(十七)设计模式-建造者模式
1、定义(Builder)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。2、使用场景用程序画一个小人,这在游戏程序里非常常见,要求十小人要有头、身体、两手、两脚就可以了。3、代码结构UML图PersonDirector:指挥者,是构建一个使用Builder接口的对象;PersonBuilder:Builder是为创建一个Product对象的各个部件知道的抽...原创 2020-02-22 21:31:23 · 205 阅读 · 0 评论 -
(十六)设计模式-组合模式
1、定义(Composite)将对象组合成树形机构以表示,“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。2、使用场景北京总公司总部下属三个机构:人力资源部、上海华东分公司、财务部门;上海华东分公司下也有几个机构:南京办事处、人力资源部、财务部、杭州办事处;南京办事处也有两个下属机构:人力资源部、财务部;杭州办事处也有两个下属机构:人力资源部、财务部。会有一组...原创 2020-02-21 14:48:26 · 320 阅读 · 0 评论 -
(十五)设计模式-备忘录模式
1、定义(Memento)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可将该对象恢复到原先保存的状态。2、使用场景在玩一些单机的PC游戏的时候,通常都在打大Boss之前,先保存一个进度,然后如果通关失败了,还可以再返回刚才那个进度来恢复原来的状态,重头来过。3、代码结构UML图游戏角色:负责创建一个备忘录Memento,用以记录当前时刻它的内部状态...原创 2020-02-21 13:46:44 · 211 阅读 · 0 评论 -
(十四)设计模式-职责链模式
1、定义(Chain of Responsibility)使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,沿着这条链传递该请求,直到有一个对象处理它为止。2、使用场景一个普通职员,需要申请请假流程,部门经理能够审批1-3天类的请假,总监能审批4-6天的请假,总经理能审批7-14天的请假申请,同时总经理可以处理员工调薪等申请审批。3、代码结构UM...原创 2020-02-20 17:54:08 · 187 阅读 · 0 评论 -
(十三)设计模式-桥接模式
1、定义(Bridge)将抽象部分与它的实现部分分离,是他们都可以独立地变化。2、使用场景有一个N品牌的手机,这个手机上有一个小游戏,也有通讯录软件,然后又有一个M品牌的手机,同时也有小游戏,和通讯录软件。如果有更多的手机品牌,那么每个品牌的手机也会有对于的手机软件。3、代码结构UML图手机品牌:Abstraction 抽象;手机软件:Implementor 实现;手机品牌N、M:...原创 2020-02-20 16:56:56 · 149 阅读 · 0 评论 -
(十二)设计模式-享元模式
1、定义(Flyweight)运用共享技术有效地支持大量细粒度的对象。2、使用场景如果要做三个产品展示、三个博客的网站,相当于是六个网站类的实例,每一个网站都需要一个对应的服务器资源,而本质上他们都是同一套代码,如果网站增多,实例也就随着增多,这对服务器的资源浪费得很严重,而且都不是属于高访问量的网站,如果整合到一个网站中,共享其相关的代码和数据,那么对于服务器资源都可以达成共享,减少服务器...原创 2020-02-19 14:33:23 · 167 阅读 · 0 评论 -
(十一)设计模式-中介者模式
1、定义用一个中介对象来封装一些列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。2、使用场景各国之间关系复杂,战略盟友、战略伙伴、战略对手利益相关者等,各国政府都需要投入大量的人力物力在政治、经济、外交方面来搞好这些关系,但不管如何努力,国与国之间的关系还是会随着时间和社会发展而发生改变。在第二次世界大战以前,由于没有这样一个民主中立的协...原创 2020-02-19 13:36:50 · 243 阅读 · 0 评论 -
(十)设计模式-解释器模式
1、定义给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中句子。2、使用场景音乐解释器,定义一套规则,O表示音阶 ‘O 1’表示低音阶,‘O 2’表示中音阶,‘O 3’表示高音阶;P表示休止符,‘C D E F G A B’ 表示’Do-Re-Mi-Fa-So-La-Ti’;音符长度1表示一拍,2表示二拍,0.5表示半拍,0.25表示四分之一拍,以此类推...原创 2020-02-18 13:03:14 · 155 阅读 · 0 评论 -
(九)设计模式-访问者模式
1、定义表示一个作用于某对象结构中的各元素操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。2、使用场景男人成功时,背后多半有一个伟大的女人;女人成功时,背后多半有一个不成功的男人;男人失败时,闷头喝酒,谁也不用劝;女人失败时,眼泪汪汪,谁也劝不了;男人恋爱时,凡事不懂也要装懂;女人恋爱时,遇事懂也装作不懂。以上仅是书中的观点,不代表博主。3、代码结构U...原创 2020-02-18 11:48:42 · 200 阅读 · 0 评论 -
(八)设计模式-迭代器模式
1、定义提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。2、使用场景小明和小王一同上了公交车,车上都是成人,售票员从头到尾一个个提醒乘客付费买票,当然售票员也可以从尾到头的方式进行提醒乘客买票。任何一个车上的人都需要一个一个买票。3、代码结构UML图4、类的实现5、客户端调用6、总结参考:《大话设计模式》...原创 2020-02-17 18:47:34 · 244 阅读 · 0 评论 -
(七)设计模式-代理模式
1、定义为其他对象提供一种代理以控制对这个对象的访问。2、使用场景快递小哥给小明打电话,让小明下去取快递,结果小明在开会没办法马上离开,只好让同事小王去帮他到楼下取一下快递,然后小王到了楼下找到快递小哥,然后快递小哥核对信息后把包裹转交给了小王,小王将包裹带回公司给了小明。小明非常感谢他。3、代码结构UML图4、类的实现(1)、IPickUp(取快递接口 抽象)public int...原创 2020-02-17 11:51:21 · 212 阅读 · 0 评论 -
(六)设计模式-单例模式
1、定义保证一个类仅有一个实例,并提供一个访问它的全局访问点。注意:Head First 中提到单例模式的时候,类构造函数为私有(private) ,通过静态方法创建实例。2、使用场景刚解放时,国家需要人,人多力量大,于是一个老百姓可能生了很多娃,于是人口迅速暴增。后来实行了计划生育,规定了一对夫妇最多只能生育一胎,并把判断的责任交给了夫妇,于是刚结婚时,想要孩子就生一个,生好一个后,...原创 2020-02-16 20:42:12 · 175 阅读 · 0 评论 -
(五)设计模式-装饰模式
1、定义动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。2、使用场景小明要去约会见妹子,初次见面,不清楚对方到底是喜欢那种类型的男生,只能猜测可能是大叔控,可能是艺术控,也可能是文艺控,也可能是奶狗控,等等,对于每一种控都会存在衣服穿着上的不同,如何解决小明的穿搭问题。我们可以将大叔型男、文艺书生、奶油小生看作是一个具体的穿搭对象,将服饰作为一个抽象类,鸭舌帽...原创 2020-02-16 20:02:05 · 168 阅读 · 0 评论 -
(四)设计模式-命令模式
1、定义将一个请求封装为对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。2、使用场景烧烤店烤串,出现三个角色:买串人、服务员、烤肉师傅。买串人点了5串烤肉,5串烤鸡翅 ,2串土豆,服务员用本子记录当前用户桌号、各类烤串数量,并可以告知买串人此烤串是否有备货,提醒用户取消对应的订单,然后点好菜之后服务员将菜单拿到厨房,交给烧烤师傅,烧烤师傅开始按...原创 2020-02-15 23:31:12 · 192 阅读 · 0 评论 -
(三)设计模式-适配器模式
1、定义将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。2、使用场景小明会中文,不会英语,要在美国NBA打球,不会英语如何交流?没有交流如何理解教练和同伴的意图?又如何让他们理解自己的想法?不能沟通就打不好球了。于是就有三个办法:(1)、让小明学会英语;马上学会听懂会说的地步是很困难的。(2)、让教练和球员学会中文;...原创 2020-02-15 17:48:33 · 209 阅读 · 0 评论 -
(二)设计模式-观察者模式
1、定义观察者模式又叫做发布-订阅(Public/Subscribe)模式。定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使他们能够自动更新自己。2、使用场景老板回来。我不知道?办公场景,同事小王,同事小明,前台小花,老板王老五,主要时这四个人物。小王长期喜欢理财炒股会在工作间隙看一些股票走势图,小明忙着考公务员...原创 2020-02-15 01:43:38 · 159 阅读 · 0 评论 -
(一)设计模式-策略模式
1、定义它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。2、使用场景一个商场收银软件客户端,营业员根据客户所购买商品的单价和数量,向客户收费。有以下几种情况:(1)、正常收费:单价 * 数量;(2)、打折收费:单价 * 数量*折扣;(3)、满300返100:如果单价 * 数量>=300,则返回 单价 * 数量-取整(单价 *...原创 2020-02-14 23:23:20 · 170 阅读 · 0 评论