
23种设计模式
文章平均质量分 63
ozhi
这个作者很懒,什么都没留下…
展开
-
Java23种设计模式(GOF)——备忘录模式
备忘录模式(memento)场景核心结构案例场景word文档编辑,电脑断电或死机,再打开,提示恢复到以前的文档微信消息或邮件系统中,消息、邮件撤回棋类游戏中的悔棋软件中的回退操作数据库管理中,事务管理的回滚操作核心保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原先的状态。结构源发器类Originator备忘录类Memento负责人类CareTake案例/** * 源发器类 * @author huangyzh * @create 2020-05-20 1:原创 2020-08-27 10:35:55 · 115 阅读 · 0 评论 -
Java23种设计模式(GOF)——命令模式
命令模式(command)结构案例开发常见场景将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。也称之为:动作Action模式、事务transaction模式结构Command抽象命令类ConcreteCommand具体命令类Invoker调用者/请求者请求的发送者,它通过命令对象来执行请求。一个调用者并不需要在设计时确定其接收者,因此它只与抽象命令类之间存在关联。在程序运行时,将调用命令对象的execute(),间接调用接收原创 2020-08-27 10:35:46 · 188 阅读 · 0 评论 -
Java23种设计模式(GOF)——中介者模式
中介者模式(Mediator)核心案例本质开发常见场景核心如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多关系,将导致关系极其复杂,这些对象称为“同事对象”。此时可以引入一个中介者对象,使各个同事对象只跟中介者对象打交道,将复杂的网状结构化为星状结构(一对多)。案例/** * 抽象中介者,定义了同事对象到中介者对象的接口 * @author huangyzh * @create 2020-05-19 0:57 */public interface Mediator {原创 2020-08-27 10:35:35 · 136 阅读 · 0 评论 -
Java23种设计模式(GOF)——代理模式
代理模式 Proxy pattern核心作用核心角色应用场景分类静态代理案例动态代理优点JDK自带的动态代理核心作用通过代理,控制对对象的访问。可以详细控制访问 某个(某类) 对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理,从而实现将统一流程代码放到代理类中进行处理。(即AOP的微观实现)核心角色抽象角色定义代理角色和真实角色的公共对外方法真实角色实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用,关注的是真正的业务逻辑代理角色实现抽象角色,是真实角色的原创 2020-08-27 10:35:22 · 116 阅读 · 0 评论 -
Java23种设计模式(GOF)——装饰模式
装饰模式(decorator)职责实现细节案例使用场景总结和桥接模式区别职责动态的为一个对象增加新的功能。装饰模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。实现细节Component抽象构建角色:真实对象和装饰对象有相同的接口。这样,客户端对象就能够以与真实对象相同的方式同装饰对象交互。IO流中的InputStream、OutputStream、Reader、WriterConcret原创 2020-08-27 10:35:08 · 125 阅读 · 0 评论 -
Java23种设计模式(GOF)——策略模式
策略模式(strategy)场景案例本质开发常见场景策略模式对应于解决某一个问题的算法族,允许用户从该算法族中任选一个算法解决某一问题,同时可以方便的更换算法或者增加新的算法。并且由客户端决定调用哪个算法。场景某个市场人员接到单后的报价策略(CRM系统中常见问题)。报价策略很复杂,简单做如下分类:普通客户小批量报价普通客户大批量报价老客户小批量报价老客户大批量报价具体选用哪个报价策略,这需要根据实际情况来确定。我们可以先用 条件语句(if) 处理,实现起来比较容易,符合一般开发原创 2020-08-27 10:34:52 · 97 阅读 · 0 评论 -
Java23种设计模式(GOF)——模板方法模式
模板方法模式(template method)场景核心案例开发常见场景模板方法模式是编程中经常用到的模式。它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。场景客户到银行办理业务取号排队办理具体现金/转账/企业/个人/理财业务给银行工作人员评分核心处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不能确定。因此,我们采用工厂方法模式,将这个节点的代码实现转移给子类完成。即:处理步骤父类中定义好原创 2020-08-27 10:34:41 · 182 阅读 · 0 评论 -
Java23种设计模式(GOF)——状态模式
状态模式(state)原创 2020-08-27 10:34:25 · 142 阅读 · 0 评论 -
Java23种设计模式(GOF)——责任链模式
责任链模式(chain of responsibility)定义场景案例定义方式开发中常见场景定义将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,佛祖传递给链上的下一个对象。场景打牌时,轮流出牌接力赛跑大学中,奖学金审批公司中,公文审批案例请假条审批流程/** * 封装请假的基本信息 * @author huangyzh * @create 2020-05-18 23:50 */public class L原创 2020-08-27 10:34:08 · 201 阅读 · 0 评论 -
Java23种设计模式(GOF)——观察者模式
观察者模式(Observer)原创 2020-08-27 10:33:47 · 256 阅读 · 0 评论 -
Java23种设计模式(GOF)——迭代器模式
迭代器模式(iterator)结构案例开发中常见场景提供一种可以遍历聚合对象的方式。又称为:游标cursor模式结构聚合对象:存储数据迭代器:遍历数据案例/** * 自定义迭代器接口 * @author huangyzh * @create 2020-05-19 0:28 */public interface MyIterator { void first();//将游标指向第一个 void next();//将游标指向下一个 boolean hasNext原创 2020-05-23 00:34:03 · 187 阅读 · 0 评论 -
Java23种设计模式(GOF)——访问者模式
访问者模式(Visitor)模式动机定义开发常见场景模式动机对于存储在一个集合中的对象,它们可能具有不同的类型(即使有一个公共的接口),对于该集合中的对象,可以接受一类称为访问者的对象来访问,不同的访问者其访问方式也有所不同。定义表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变个元素的前提下定义作用于这些元素的新操作。开发常见场景XML文档解析器设计编译器的设计复杂集合对象的处理...原创 2020-05-21 00:19:17 · 166 阅读 · 0 评论 -
Java23种设计模式(GOF)——解释器模式
解释器模式(Interpreter)介绍案例开发常见场景介绍是一种不常用的设计模式用于描述如何构成一个简单的语言解释器,主要用于使用面向对象语言开发的编译器和解释器设计。当我们需要开发一种新的语言时,可以考虑使用解释器模式尽量不要使用解释器模式,后期维护会有很大麻烦。在项目中,可以使用Jruby,Groovy,Java的js引擎来替代解释器的作用,弥补Java语言的不足。案例略开发常见场景EL表达式的处理正则表达式解释器SQL语法的解释器数学表达式解析器如现成的工具包:Ma原创 2020-05-21 00:18:36 · 168 阅读 · 0 评论 -
Java23种设计模式(GOF)——享元模式
享元模式(FlyWeight)场景核心实现案例应用场景总结场景内存属于稀缺资源,不要随便浪费。如果有很多个完全相同或相似的对象,我们可以通过享元模式,节省内存。核心享元模式以共享的方式高效地支持大量细粒度对象的重用。享元模式能做到共享的关键是区分了内部状态和外部状态。内部状态:可以共享,不会随环境变化而改变外部状态,不可以共享,会随环境变化而改变实现FlyweightFactory享元工厂类创建并管理享元对象,享元池一般设计成键值对FlyWeight抽象享元类通常是一个接原创 2020-05-19 23:10:07 · 301 阅读 · 0 评论 -
Java23种设计模式(GOF)——外观模式
外观模式(门面模式)核心案例使用场景核心为了子系统提供统一的入口。封装子系统的复杂性,便于客户端调用。案例注册公司流程不使用外观模式/** * 工商局 * @author huangyzh * @create 2020-05-18 22:22 */public interface GongShangJu { void checkName();//核名}public class FuzhouGongShangJu implements GongShangJu { @原创 2020-05-18 22:40:49 · 170 阅读 · 0 评论 -
Java23种设计模式(GOF)——组合模式
组合模式(composite)场景核心组件关系工作流程分析案例应用场景场景把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象核心抽象构件(Component)角色:定义了叶子和容器构建的共同点叶子(Leaf)构件角色:无字节点容器(Composite)构件角色:有容器特征,可以包含子节点组件关系/** * 抽象组件 * @author huangyzh * @create 2020-05-17 16:45 */public interf原创 2020-05-18 00:22:19 · 195 阅读 · 0 评论 -
Java23种设计模式(GOF)——桥接模式
桥接模式(bridge)场景核心要点案例应用场景总结场景商城系统中常见的商品分类,以电脑为类,如何良好的处理商品分类销售的问题?如图:可以使用多层继承结构实现上图的关系,但存在以下问题:扩展性问题(类个数膨胀问题):如果要增加一个新的电脑类型:智能手机,则要增加各个品牌下面的类如果要增加一个新的品牌,也要增加各种电脑类型的类违反单一职责原则:一个类:联想笔记本,有两个引起这个类变化的原因在这个场景下有两个变化的维度:电脑类型、电脑品牌此时,可以将这个两个维度分开,根据原创 2020-05-17 16:37:25 · 332 阅读 · 0 评论 -
Java23种设计模式(GOF)——适配器模式
适配器模式将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。模式中的角色目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。需要适配的类(Adaptee)...原创 2020-05-16 10:37:04 · 282 阅读 · 0 评论 -
Java23种设计模式(GOF)——原型模式
原型模式实现方式案例使用场景:通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式。实质:该模式实质是使用java中的克隆技术,以某个对象为原型,复制出新的对象。显然,新的对象具备原型对象的特点。优势:效率高(直接克隆,避免了重新执行构造过程步骤)。与new的区别:克隆类似于new,但是不同于new。new创建新的对象属性采用的是默认值。克隆出的对象的属性值完全和原型对象相同。并且克隆出的新对象改变不会影响原型对象。然后,再修改克隆对象的值。实现方式Cloneable接口原创 2020-05-16 10:35:43 · 250 阅读 · 0 评论 -
Java23种设计模式(GOF)——建造者模式
建造者模式场景本质案例开发场景场景我们需要建造一个复杂的产品。比如:潜水艇、手机,在建造这个产品的过程中需要处理一个问题:装配这些子组件是不是有一个步骤问题?实际开发中,我们所需要的对象构建时,也非常复杂,有很多步骤需要处理。本质分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序原创 2020-05-15 01:29:05 · 381 阅读 · 0 评论 -
Java23种设计模式(GOF)——工厂模式
工厂模式:实现了创建者和调用者的分离。详细分类:简单工厂模式、工厂方法模式、抽象工厂模式。核心本质实例化对象,用工厂方法代替new操作。将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。...原创 2020-05-14 00:57:23 · 202 阅读 · 0 评论 -
Java23种设计模式(GOF)——单例模式
核心作用保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。常见应用场景1、windows系统的任务管理器和回收站就是很典型的单例模式;2、项目中读取配置文件的类,一般也只有一个对象,没必要每次使用配置文件数据,每次new一个对象去读取;3、网站的计数器,一般也是采用单例模式实现,否则难以同步;4、应用程序的日志应用,一般都采用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加;5、数据库连接池的设计一般也是采用单例模式,因为数据原创 2020-05-13 22:57:28 · 542 阅读 · 0 评论 -
Java23种设计模式(GOF)
设计模式的三大分类1、创建型模式五种:单列模式、工厂模式、抽象工厂模式、建造者模式、原型模式。2、结构型模式七种:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式3、行为型模式十一种:模板方法模式、命令模式、迭代器模式、观察者模式、终结者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。设计模式的六大原则1、单一职责原则2、里氏替换原则3、依赖倒转原则4、接口隔离原则5、迪米特法则6、开闭原则学习设计模式的初衷是为了学习设原创 2020-05-13 22:56:34 · 185 阅读 · 0 评论