![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java设计模式
文章平均质量分 79
敲个大西瓜
小白
展开
-
设计模式之间的对比
抽象工厂模式 VS 建造者模式 VS模板方法模式● 抽象工厂模式:由工厂对象决定创建出哪种产品类的实例,为访问类提供一个创建一组相关或相互依赖对象接口,且访问类无须指定所要产品的具体类就能得到同族不同等级的产品● 建造者模式:将复杂对象的建造过程与它的表示分离,使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象● 模板方法模式:定义一个操作中的算法骨架,将一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重新定义该算法的某些特定步骤抽象工厂模式抽象工厂模式模板方法模式原创 2022-05-13 21:12:29 · 109 阅读 · 0 评论 -
设计模式---策略模式
问题引出:编写鸭子项目具体要求如下:有各种鸭子(比如野鸭,北京鸭,水鸭等)鸭子有各种行为,比如叫,飞行等显示鸭子的信息,传统方法:public abstract class Duck { public void quark() { System.out.println("鸭子嘎嘎叫~"); } public void swim() { System.out.println("鸭子哗哗游~"); } public void原创 2022-05-13 20:52:49 · 150 阅读 · 0 评论 -
【设计模式---状态模式
问题引出:app抽奖活动问题请编写程序完成app抽奖活动,具体要求如下:加入每参加一次这个活动都要扣除用户五十积分,中奖概率是10%奖品数量固定,抽完就不能抽奖活动有四个状态:可以抽奖、不能抽奖、发放奖品和奖品领完活动的四个状态转换关系图状态模式的基本介绍状态模式(state pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题,状态和行为是一一对应的,状态之间可以相互转换当一个对象的内在状态改变时,允许改变其行为,这个对象是改变了其类,角色与职责● C原创 2022-05-13 20:30:42 · 110 阅读 · 0 评论 -
设计模式---命令模式
问题引出:智能生活项目需求我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,只要在手机上安装 APP 就可以控制这些家电的工作这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个 APP 分别控制,我们希望只要一个 APP 就可以控制全部智能家电要实现一个 APP 控制所有智能家电的需要,则每个智能家电厂家都要提供一个统一的接口给 APP 调用,这时就可以考虑使用命令模式命令模式可将“动作的请求者”从“动作的执行者”对象中解耦出来在我们的例子中,动作的请求者是手机 APP,动作的执行者原创 2022-05-13 20:09:11 · 198 阅读 · 0 评论 -
设计模式---模板模式
问题引出:豆浆制作问题编写制作豆浆的程序,说明如下:制作豆浆的流程选材 ----> 添加配料 ----> 浸泡 ----> 放到豆浆机打碎,通过添加不同的配料,可以制作出不同口味的豆浆,选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的请使用模板方法模式完成模板模式的基本介绍模板方法模式(template method pattern),又叫模板模式(template pattern),在一个抽象类公开定义了执行他的方法的模板,它的子类可以按需要重写方法实现,但调原创 2022-05-13 19:42:49 · 66 阅读 · 0 评论 -
设计模式---代理模式
代理模式的基本介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象代理模式有不同的形式,主要有三种:○ 静态代理○ 动态代理:JDK 代理、接口代理○ Cglib 代理:可以在内存动态的创建对象,而不需要实现接口,它是属于动态代理的范畴静态代理静态代理在使里时,需要定义接口或者父类,被代理对象(即目标对象)原创 2022-05-12 22:41:38 · 274 阅读 · 0 评论 -
设计模式---享元模式
问题引出:展示网站项目需求小型的外包项目,给客户 A 做一个产品展示网站,客户 A 的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同:有客户要求以新闻的形式发布,有客户人要求以博客的形式发布,有客户希望以微信公众号的形式发布传统方案解决网站展现项目:直接复制粘贴一份,然后根据客户不同要求,进行定制修改,给每个网站租用一个空间问题分析:需要的网站结构相似度很高,而且都不是高问量网站,如果分成多个虚拟空间来处理,相当于一个相同网站的实例对象很多,造成服务器的资源浪费解决思路:整合到原创 2022-05-12 22:31:55 · 62 阅读 · 0 评论 -
设计模式---外观模式
问题引出:影院管理项目组建一个家庭影院:DVD 播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为:● 直接用遥控器:统筹各设备开关● 开爆米花机● 放下屏幕● 开投影仪● 开音响● 开DVD,选dvd● 去拿爆米花● 调暗灯光● 播放● 观影结束后,关闭各种设备ClientTest{ public static void main(String[] args){ // 1、创建相关的对象 // 2、调用创原创 2022-05-12 21:59:34 · 105 阅读 · 0 评论 -
设计模式---组合模式
问题引出:编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图:传统方式解决学校院系展示(类图)问题分析:将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的实际上我们的要求是:在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。因此这种方案,不能很好实现的 管理 的操作,比如对学院、系的添加、删除、遍历等解决方案:把学校、院、系都看做是组织结构,他们之间没有继承的关系,而是一个原创 2022-05-12 21:29:34 · 139 阅读 · 0 评论 -
设计模式---装饰者模式
问题引出:星巴克咖啡订单项目咖啡种类/单品咖啡:Espresso(意大利浓咖)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)调料:Mik、Soy(豆浆)、Chocolate要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便使用 OO 的来计算不同种类咖啡的费用:客户可以点单品咖啡,也可以单品咖啡+调料组合● 1)Drink 是一个抽象类,表示饮料● 2)description 就是对咖啡的描述,比如咖啡的名字● 3)cost 方法就是计算费用,Dr原创 2022-05-12 20:29:50 · 478 阅读 · 0 评论 -
设计模式---桥接模式
桥接模式问题引出:现在对不同手机类型的不同品牌实现操作编程(如:开机,关机,上网,打电话等),如图扩展性问题(类爆炸):如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,如果我们增加一个手机品牌也要在各个手机样式类下增加,违法了单一职责原则:我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本,桥接模式介绍1.桥接模式(Bridge模式):一种结构型设计模式:将实现与抽象放在两个不同的类层次中,使得两者层次可以独立,2.桥接模式基于类的最小设计原则,通过使用封装,原创 2022-05-12 19:57:55 · 2197 阅读 · 0 评论 -
设计模式---适配器模式
适配器模式基本介绍适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)适配器模式属于结构型模式主要分为三类:类适配器模式、对象适配器模式、接口适配器模式工作原理适配器模式:将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容从用户的角度看不到被适配者,是解耦的用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法用户收到反馈原创 2022-05-01 21:56:12 · 514 阅读 · 0 评论 -
设计模式---建造者模式
建造者模式1.盖房项目需求需要建房子:这一过程为打桩、砌墙、封顶房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的请编写程序,完成需求public abstract class AbsHouse { protected abstract void piling(); protected abstract void walling(); protected abstract void capping(); public voi原创 2022-05-01 21:26:20 · 58 阅读 · 0 评论 -
设计模式---原型模式
克隆羊问题现在有一只羊,姓名为 Tom,年龄为 1,颜色为白色,请编写程序创建和 Tom 羊属性完全相同的 10 只羊传统方法:public class Sheep { private String name; private Integer age; public Sheep(String name, Integer age) { this.name = name; this.age = age; } public原创 2022-05-01 20:57:33 · 627 阅读 · 0 评论 -
设计模式---工厂模式
工厂模式具体的需求看一个披萨的项目:要便于披萨种类的扩展,要便于维护披萨的种类很多(比如 GreekPizz、CheesePizz 等)披萨的制作有 prepare、bake、cut、box完成披萨店订购功能public abstract class Pizza { protected String name; public void setName(String name) { this.name = name; } public abst原创 2022-05-01 17:39:20 · 187 阅读 · 0 评论 -
设计模式---单例模式
单例模式所谓类的单例模式,就是采取一定的方法保证整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得该对象实例的方法(静态方法)。比如hibernate的SessionFactory,它充当数据存储源的代理,并且创建Session对象,SessionFactory并不是轻量级的,一般情况下,一个项目通常只需要一个SessionFactory就够。八种方式:1.饿汉式(静态常量),2.饿汉式(静态代码块),3.懒汉式(线程不安全),4.懒汉式(线程安全,同步方法),5.懒汉式(线程安全,原创 2022-05-01 16:08:08 · 131 阅读 · 0 评论 -
Java设计模式总结之23种设计模式
1. 什么是设计模式设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛原创 2020-10-29 19:23:07 · 124 阅读 · 0 评论 -
JAVA设计模式总结之六大设计原则
单一职责原则里氏替换原则依赖倒置原则接口隔离原则迪米特法则开闭原则废话少说,直接上图具体的我也不细说,直接上链接Java设计模式之六大设计原则费尽心思,大哥走过路过一键三联可否!!!!资源也是货比三家费劲找来的,...转载 2020-10-28 21:31:29 · 155 阅读 · 0 评论