![](https://img-blog.csdnimg.cn/20200824112002586.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JAVA设计模式
文章平均质量分 86
设计模式的一些基本用法和案例
JolyouLu
技术交流群 528668633
展开
-
23设计模式-职责链模式(行为型模式)
责任链模式责任链模式将围绕OA系统审批需求讲解采购员采购教学器材如果金额小于等于5000,由教学主任审批(0<=x<=5000)如果金额小于等于10000,由院长审批(5000<=x<=10000)如果金额小于等于30000,由副校长审批(10000<=x<=30000)如果金额大于30000以上,由校长审批(x>=30000)传统解决方案PurchaseRequest采购申请,接收到一个采购申请后,通过多个if-else判断金额来调用对应原创 2021-04-13 16:12:23 · 131 阅读 · 0 评论 -
23设计模式-策略模式(行为型模式)
策略模式策略模式将围绕着一个关于鸭子的问题讲解有各种鸭子(如野鸭、水鸭、北京鸭,鸭子有各种行为,如飞行、叫等)显示鸭子信息传统解决方案编写一个抽象的父类Douck,编写各种鸭子并且继承DouckDuckDuck:一个抽象的父类里面提供了鸭子的模式实现WildDucks/WaterDuck/TouDuckWildDucks/WaterDuck/TouDuck:继承Duck父类根据鸭子实际情况,实现或重写相应的方法传统解决方案总结缺点:其它鸭子,都继承了Duck原创 2021-04-13 13:19:39 · 133 阅读 · 0 评论 -
23设计模式-状态模式(行为型模式)
状态模式状态模式将围绕着抽奖获得问题讲解假如每参加一次这个活动要扣除用户50积分,中奖概率是10%奖品数量固定,抽完就不能抽奖活动有四个状态:可以抽奖,不能抽奖,发放奖品,奖品领完状态模式解决方案基本介绍状态模式(State Pattern)它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题,状态和行为是一一对应的,状态之间可以相互转换当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类Context:上下文角色,用于维护State实例S原创 2021-04-12 00:53:25 · 102 阅读 · 0 评论 -
23设计模式-解释器模式(行为型模式)
解释器模式解释器模式将围绕着实现四则运算先输入表达式的形式,比如a+b+c-d+e,要求表达式字母不能重复在分别输入a,b,c,d,e的值,最后计算结果解释器模式解决方案基本介绍在编译原理中,一个算术表达式通过词法分析器形成词法单元,而后这些词法单元通过语法分析器构建语法分析树,最终形成一颗抽象的语法分析树,这里的词法分析器和语法分析器都可以看做是解析器解析器模式(Interpret Pattern):是将给定一个语言(表达式),定义它的文法的一种表示,并定义一个解析器,使用该解析原创 2021-04-10 22:29:51 · 108 阅读 · 0 评论 -
23设计模式-备忘录模式(行为型模式)
备忘录模式备忘录组合模式将围绕着游戏项目每一个游戏玩家有攻击力和防御力,在大战Boss前保持自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录获取大战前状态并且恢复传统解决方案每一个游戏玩家,我们都创建一个对象副本来保持这个人物的状态传统解决方案总结缺点:每一个玩家都对应一个保持状态的对象,当游戏对象很多时,不利于管理,而且开销很大缺点:传统的方式是简单的做备份,new处另外一个对象出来,再把需要备份的数据放到这个新对象,但这暴露对象的内部结构备忘录原创 2021-04-10 20:34:29 · 76 阅读 · 0 评论 -
23设计模式-中介者模式(行为型模式)
中介者模式中介者模式将围绕着智能家居项目简介智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘等主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为:闹钟响起=>咖啡机开始工作=>窗帘自动落下=>电视机开始播放传统解决方案client调用clock开启方法,clock开启完毕后,调用TV开启方法,TV开启完毕后调用curtain开启方法传统解决方案总结缺点:但各电器对象有多种状态改变时,相互之间的调用关系会比较复杂缺点:各个电器对象彼此联原创 2021-04-09 17:20:40 · 132 阅读 · 0 评论 -
23设计模式-观察者模式(行为型模式)
观察者模式观察者模式将围绕着天气预报项目简介天气预报项目需求如下气象站可以将每天测量到的温度,湿度,气压等以公告的形式发布出去需求设计开放型API,便于其它等三方也能接入气象站获取数据提供温度,气压和湿度的接口测量数据更新是,要能实时的通知给第三方传统解决方案WeatherData:一个气象分析类,该类会提供,温度、湿度等get方法给第三方接入CurrentConditions:气象局网站,通过dispaly方法获取相关信息(其实是调用了WeatherData的get方法),up原创 2021-04-09 17:17:56 · 151 阅读 · 0 评论 -
23设计模式-迭代器模式(行为型模式)
迭代器模式组合模式将围绕着展示院校专业展示项目(之前再组合模式也用过这个例子)学校系展示项目:编写一个程序,展示学校院系结构要在一个页面中展示出学院的院系组成,一个学校有多个学院,一个学院有多个系传统解决方案将学院看做学校的子类,系是学院的子类传统解决方案总结缺点:将学院看做学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层缺点:我们需要在一个页面中展示出学校的组成,一个学校多个学院,一个学院多个专业,因此这种方案,不能很好遍历结构迭代器模式解决方案基本介原创 2021-04-04 23:38:08 · 99 阅读 · 0 评论 -
23设计模式-访问者模式(行为型模式)
访问者模式访问者模式将围绕着一个评分系统简介将来评分分为男生和女生,对歌手进行评测,当看完某一个歌手表演后,得到它们对该歌手不同的评价,评价类型有(成功、失败、等)传统解决方案传统解决方案总结如果系统较小,还是可以使用该方案,但是考虑到系统后期会增加不同的评分类型,或者需要对男生细分成男孩、青年等,整个代码改动就会较大,违法OCP原则访问者模式解决方案基本介绍访问者模式(Visitor Pattern),封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下原创 2021-04-04 22:00:52 · 82 阅读 · 0 评论 -
23设计模式-命令模式(行为型模式)
命令模式命令模式将围绕着一个智能家居程序解说我们买了一套智能家居,有电灯、风扇、冰箱、洗衣机,我们只要在手机上安装APP就可以控制对这些家电工作这些智能家居来自不同的厂家,我们又不想针对每一种家电安装一个APP,分别控制,我们希望只要一个app就可以控制全部家电命令模式解决方案要实现一个app控制所有智能家居,则每一个家电厂家都要提供一个统一的接口给app调用,这时可以使用命令模式实现命令模式可以将“动作请求者”从“动作的执行者”对象中解耦基本介绍命令模式(Command P原创 2021-03-29 21:59:20 · 176 阅读 · 0 评论 -
23设计模式-模板方法模式(行为型模式)
模板方法模式模板方法模式将围绕着一个豆浆制作程序解说制作豆浆的流程,选材=>添加配料=>浸泡=>放入豆浆机通过添加不同的配料,可以制作不同口味的豆浆选材、浸泡和放豆浆机这几个步骤对于制作不同口味的豆浆都是一样的模板方法解决方案由于模板方法方案很容易就想到,所以这个就不通过传统的方案例子逐步改进成模板方法模式了基本介绍模板方法(Template Method Pattern),又叫模板模式(Template Pattern),在一个抽象类公开定义了执行它的方法原创 2021-03-28 20:56:14 · 78 阅读 · 0 评论 -
23设计模式-享元模式(结构型模式)
享元模式享元模式将围绕着一个小型网站外包项目讲解有一个小型外包项目,给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求一些不同有客户要求以新闻的形式发布有客户要求以博客发形式发布有客户要求以公众号的形式发布传统解决方案直接复制粘贴一份,然后根据客户不同需求,进行定制修改给每一个网站租用一个空间传统解决方案总结需要的网站结构相似度很高,而且都不是高访问量网站,如果分成多个虚拟空间来处理,相当于一个相同网站实例对象很多,造成服务器的原创 2021-03-27 13:17:45 · 76 阅读 · 0 评论 -
23设计模式-外观模式(结构型模式)
外观模式外观模式将围绕着一个组建家庭影院项目讲解组建一个家庭影院,里面包含DVD播放器、投影仪、自动屏幕、立体环绕声、爆米花机如下功能家庭影院需要使用遥控器实现如下功能:打开爆米花机=>放下屏幕=>开投影仪=>开音响=>开DVD=>拿爆米花=>调灯光=>播放=>观影结束,关闭所有设备传统解决方案为每一种设备都创建一个对象,客户端跳过new来得到相应的设备对其进行操作传统解决方案总结缺点:ClientTest的main方法中,创建各原创 2021-03-14 16:06:18 · 139 阅读 · 0 评论 -
23设计模式-组合模式(结构型模式)
组合模式组合模式将围绕着展示院校专业展示项目学校系展示项目:编写一个程序,展示学校院系结构要在一个页面中展示出学院的院系组成,一个学校有多个学院,一个学院有多个系传统解决方案将学院看做学校的子类,系是学院的子类传统解决方案总结缺点:将学院看做学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层缺点:我们需要在一个页面中展示出学校的组成,一个学校多个学院,一个学院多个专业,因此这种方案,不能很好的实现管理的操作,比如对学院、系进行增删改查操作解决方案:把学校、院、原创 2021-03-13 19:03:19 · 192 阅读 · 0 评论 -
23设计模式-装饰者模式(结构型模式)
装饰者模式装饰者模式将围绕着一个奶茶店Coco点单过程讲解Coco奶茶店订单项目:奶茶种类/奶茶单品:PearlMilkTea(珍珠奶茶)BerryTea(莓莓果茶)配料:Pearl(珍珠)、NataDeCoco(椰果)、Pudding(布丁)要求在扩展新的奶茶种类时,具有良好的扩展性、改动方便、维护方便使用OO来计算不同种类奶茶的费用:客户可以单品奶茶,也可以单品奶茶+配料组合传统解决方案1这是一个最简单粗暴的方案,做一个抽象类Drink(饮料),里面包含description(原创 2021-03-06 19:33:55 · 239 阅读 · 0 评论 -
23设计模式-桥接模式(结构型模式)
桥接模式手机操作问题,现在对不同手机类型的不同品牌都需要实现操作编程(比如:开机、关机、上网打电话等)传统解决方案传统的方式,编写一个Phone类然后编写各种不同的样式的手机类继承Phone类,最后再每一个样式下编写上华为、小米、vivo再这样式下相应的开机方法传统解决方案问题分析缺点:扩展性问题,当我需要增加一个手机品牌时,那么都需要在所有的样式同时都需要增加该手机类缺点:违反单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本使用桥接模式解原创 2021-02-28 23:11:12 · 121 阅读 · 0 评论 -
23设计模式-适配器模式(结构型模式)
适配器模式适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作,其别名为包装器(Wrapper)适配器模式属于结构性模式主要分为三类:类适配器、对象适配器、接口适配器适配器工作原理适配器模式:将一个类的接口转换成另一个接口,让原本接口不兼容的类可以兼容从用户的角度看不到被适配者,是解耦的用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法用户收到反馈结果,感觉原创 2021-02-28 02:29:01 · 146 阅读 · 0 评论 -
23设计模式-建造者模式(创建型模式)
建造者模式建造者模式将围绕着一个修建房子的需求简介需要修建一个房子,修房子过程有打桩、砌墙、封顶房子有各种各样,比如普通民房,高楼,别墅等各种房子虽然修建一样,但是要求不一样传统方式解决盖房需求首先编写一个AbstractHouse抽象类类,其中包含了3个抽象方法打桩,砌墙,封顶,子类通过继承父类,实现父类方法来修建不同要求的楼房AbstractHouseAbstractHouse抽象类,里面写着3个抽象方法需要子类去实现的CommonHouse普通民房,继承Abst原创 2021-02-23 23:06:07 · 150 阅读 · 0 评论 -
23设计模式-原型模式(创建型模式)
原型模式简介在日常开发中经常会遇到对象克隆等问题,在处理这些问题时如何优雅的编写代码,这时就需要使用到原型模式如现在有一只羊,名字:tom,年龄:1,颜色:白色,需编写程序创建5只属性完全相同的羊传统方式解决克隆问题实现很简单,我们只需要创建一个Sheep传入参数,其余的4个Sheep创建时使用第一个Sheep对象的属性创建,这样就可以保证5个羊的属性都一致了传统方式优缺点优点比较好理解,简单易操作缺点如果我的sheep对象突然需要增加多一个属性,那我拷贝的那些对象全部都要重原创 2021-01-31 17:28:13 · 103 阅读 · 1 评论 -
23设计模式-代理模式(结构型模式)
代理模式简介代理模式:为一个对象提供一个替身,以控制对这个对象的访问,即通过代理对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能被代理的对象可以是远程对象、创建开销大的对象或需安全控制的对象代理模式有不同的形式,主要有三种静态代理、动态代理(JDK代理、接口代理)和Cglib代理(在内存动态创建对象,不需要实现接口完成代理)静态代理实现实例要求:如疫情期间,学校不能开学,老师不能上课,老师想到了网课,学生门通过APP来进行上课,APP就可以理解为代理对原创 2020-11-29 14:17:39 · 101 阅读 · 0 评论 -
23设计模式-工厂模式(创建型模式)
工厂模式透过一个买卖披萨项目,解释工厂模式的多种实现,以及用法简单工厂模式如有一个披萨项目需要实现如下功能披萨种类有很多,如GreekPizz、CheesePizz等披萨制作过程有prepare,bake,cut,box披萨都需要从披萨店中订购使用传统方式实现经过分析我们发现,披萨制作过程bake,cut,box都是一致的,prepare每一种披萨的制作方式有略微不同,什么我们把prepare,bake,cut,box提取出来放入一个叫Pizza的抽象类中,GreekPizz、Chee原创 2020-10-24 13:19:44 · 173 阅读 · 0 评论 -
23设计模式-单例模式(创建型模式)
单例模式简介单例设计模式,就是采取一定的方法保证整个的软件系统中,对某一个类只能存在一个对象实例,并且该类构造方法是私有的,对外提供一个获取对象的静态方法,在实际开发过程中单例模式有8种写法8种写法饿汉式(静态常量)测试优缺点优点:这种写法比较简单,就是在类装载的时候就已经完成实例化了,可以避免线程同步问题缺点:在类转载的时候完成实例化,如果从开始到程序结束都没有使用到这个类,这就会造成内存的浪费补充:因为这个方式是基于类装载机制避免了多线程同步的问题,instance在类装载时就会原创 2020-09-13 11:42:16 · 142 阅读 · 0 评论 -
设计模式六大原则
设计模式七大原则设计模式的目的在写代码的时候我们,常常会面临着代码的耦合性、内聚性、可维护性、重用性、灵活性等多方面的挑战,设计模式就是为了让程序,具有更加好的代码重用性(相同功能的代码,不用多次编写)可读性(编程规范性,便于其他程序员的阅读和理解)可扩展性(需要添加新功能时,十分方便)可靠性(增加新功能后,对原有的功能不影响)使程序呈现高内聚,低耦合的特性(各功能体现出来高内聚,但是相互不影响)设计模式七大原则单一职责原则基本介绍相对类来说的,即一个类应该只负责一个职责,典型的例原创 2020-08-30 18:49:45 · 141 阅读 · 0 评论