java设计模式
枫叶-哈哈
简述简述
展开
-
java设计模式-备忘录模式
参考文章 备忘录模式 备忘录模式 每个人都有犯错误的时候,都希望有种“后悔药”能弥补自己的过失,让自己重新开始,但现实是残酷的。在计算机应用中,客户同样会常常犯错误,能否提供“后悔药”给他们呢?当然是可以的,而且是有必要的。这个功能由“备忘录模式”来实现。 其实很多应用软件都提供了这项功能,如 Word、记事本、Photoshop、Eclipse 等软件在编辑时按 Ctrl+Z 组合键时能撤销当前操作,使文档恢复到之前的状态;还有在 IE 中的后退键、数据库事务管理中的回滚操作、玩游戏时的中间结果存档功能、原创 2020-08-17 10:34:10 · 120 阅读 · 0 评论 -
java设计模式-迭代器模式
参考文章 迭代器模式 迭代器模式 提供一个对象来顺序访问聚合对象中的一系列数据, 结构与实现 抽象聚合(Aggregate)角色:定义存储、添加、删除聚合对象以及创建迭代器对象的接口。 具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。 抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。 具体迭代器(Concretelterator)角色:实现抽象迭代器接口中所定义的方法,完成对原创 2020-08-14 16:11:16 · 132 阅读 · 0 评论 -
java设计模式-中介者模式
参考文章 中介者模式 中介者模式 在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”,它要求每个对象都必须知道它需要交互的对象。例如,每个人必须记住他(她)所有朋友的电话;而且,朋友中如果有人的电话修改了,他(她)必须告诉其他所有的朋友修改,这叫作“牵一发而动全身”,非常复杂。 如果把这种“网状结构”改为“星形结构”的话,将大大降低它们之间的“耦合性”,这时只要找一个“中介者”就可以了。如前面所说的“每个人必须记住所有朋友电话”的问题,只要在网上建立一个每个朋友都可以访问原创 2020-08-14 15:49:05 · 135 阅读 · 0 评论 -
java设计模式-观察者模式
参考文章 观察者模式 观察者模式 定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。 例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;还有,当我们开车到交叉路口时,遇到红灯会停,遇到绿灯会行。这样的例子还有很多,例如,股票价格与股民、微信公众号与微信用户、气象局的天气预报与听众、小偷与警察等。 结构与实现 抽象主题(Subject)角色:也叫抽象目标类,它提供了一个原创 2020-08-14 10:19:26 · 90 阅读 · 0 评论 -
java设计模式-状态模式
参考文章 状态模式 状态模式 在软件开发过程中,应用程序中的有些对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。当有状态的对象与外部事件产生互动时,其内部状态会发生改变,从而使得其行为也随之发生改变。如人的情绪有高兴的时候和伤心的时候,不同的情绪有不同的行为,当然外界也会影响其情绪变化。 模式的定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 结构与实现 环境(Con原创 2020-08-14 10:08:15 · 195 阅读 · 0 评论 -
java设计模式-责任链模式
参考文章 责任链模式 责任链模式 模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。 在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据自己要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息原创 2020-08-14 10:02:08 · 97 阅读 · 0 评论 -
java设计模式-策略模式
参考文章 策略模式 策略模式 在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。 在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变原创 2020-08-14 09:56:31 · 134 阅读 · 0 评论 -
java设计模式-模板方法模式
参考文章 模板方法模式 模板方法模式 定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。 例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。 构与实现 抽象类(Abstract Class):负责给出一个算法的原创 2020-08-14 09:51:11 · 192 阅读 · 0 评论 -
java设计模式-组合模式
参考文章 组合模式 组合模式 也叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。 在软件开发中存在很多“部分-整体”的关系,例如,文件系统中的文件与文件夹。对这些简单对象与复合对象的处理,如果用组合模式来实现会很方便。 结构与实现 抽象构件(Component)角色:它的主要作用是为树叶构件和树枝构件声明公共接口,并实现它们的默认行为。在透明式的组合模式中抽象构件还声明访问和管理子类的接口;在安全式的组合模式中不声明访原创 2020-08-11 18:27:40 · 131 阅读 · 0 评论 -
java设计模式-外观模式
参考文章 外观模式 外观模式 是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。 在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标。 结构与实现 外观(Facade)角色:为多个子原创 2020-08-10 18:26:03 · 143 阅读 · 0 评论 -
java设计模式-装饰模式
参考文档 装饰模式 装饰模式 指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。 在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以釆用装饰模式来实现。 结构与实现 抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。 具体构件(Concrete原创 2020-08-10 17:55:03 · 113 阅读 · 0 评论 -
java设计模式-桥接模式
参考文章 桥接模式 桥接模式 在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于 Photoshop 这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很多,而且扩展困难。 桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。 结构与实现 抽象化(Abstraction)角色:定义抽象类,并包原创 2020-08-10 17:49:43 · 110 阅读 · 0 评论 -
java设计模式-适配器模式
参考文档 适配器模式 适配器模式 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作 在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。 在软件设计中也可能出现:需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些原创 2020-08-05 18:26:42 · 146 阅读 · 0 评论 -
java设计模式-代理模式
参考文档 代理模式 代理模式 由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 如:因为安全原因需要屏蔽客户端直接访问真实对象,如某单位的内部数据库等。 结构与实现 抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。 真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。 代理(Proxy)类:提供了与真实主题相同原创 2020-08-05 14:20:43 · 132 阅读 · 0 评论 -
java设计模式-建造者模式
参考文献 建造者模式 建造者模式 指一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。 在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由 OPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后再交给要买计算机的采购员。 结构与实现 产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者原创 2020-08-05 11:43:57 · 134 阅读 · 0 评论 -
java设计模式-抽象工厂模式
参考文献: 抽象工厂模式 抽象工厂模式 工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机等。但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类) 的产品,如农场里既养动物又种植物,电器厂既生产电视机又生产洗衣机或空调。 通俗的讲:工厂方法 的抽象接口只有一个方法,产生一个产品。抽象工厂模式 的抽象接口有多个方法,产生一组产品。 模式的结构与实现 抽象工厂模式同工厂方法模式一样,也是由抽象工厂、具体工厂、抽象产品和具体产品等 4 个要素构成,但抽象工厂中方法个数不同,抽象产原创 2020-08-04 00:28:51 · 105 阅读 · 0 评论 -
java设计模式-工厂方法模式
参考文献: 工厂方法模式 工厂方法模式 我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。 模式的结构与实现 工厂方法模式由抽象工厂、具体工厂、抽象产品和具体产品等4个要素构成。本节来分析其基本结构和实现方法。 模式的结构 工厂方法模式的主要角色如下。 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。 具体工厂(Concr原创 2020-08-03 23:59:17 · 783 阅读 · 0 评论 -
java设计模式-原型模式
参考文献: 原型模式 原型模式 在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单。 原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。例如,Windows 操作系统的安装通常较耗时,如果复制就快了很多。原创 2020-08-03 23:55:40 · 112 阅读 · 0 评论 -
java设计模式-单例模式
参考文献: 单例模式 单例模式 单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。 单例模式有 3 个特点: 单例类只有一个实例对象; 该单例对象必须由单例类自行创建; 单例类对外提供一个访问该单例的全局访问点; 应用场景 在应用场景中,某类只要求生成一个对象的时候,如一个班中的班长、每个人的身份证号等。 当对象需原创 2020-08-03 23:53:38 · 124 阅读 · 0 评论 -
java软件设计模式原则
设计模式的原则 开闭原则 由 勃兰特·梅耶提出:软件实体应当对扩展开放,对修改关闭。 简单理解:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。 实现方法:通过“抽象约束、封装变化”来实现开闭原则,即通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中。 里氏替换原则 由 里斯科夫(Liskov)女士提出:继承必须确保超类所拥有的性质在子类中仍然成立。通俗来讲就是:子类可以扩展父类的功能,但不能改变父类原有原创 2020-08-04 00:00:02 · 97 阅读 · 0 评论