设计模式
设计模式
growing_duck
这个作者很懒,什么都没留下…
展开
-
设计模式-责任链模式
责任链模式 当某个请求或事件,有多个对象都有可能处理它,但是不确定具体是谁,顺序怎样。 此时如果让请求自己去一一寻找这些对象,无疑增加了复杂度和耦合度。 责任链模式的定义:为了避免请求发送者 与 多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。 如Struts2的拦截器、JSP和Servlet的 Filter 等,所有这些,都可以考虑使用责任链模式来实现。 拦截后能处理就处理,不能...原创 2021-11-12 17:26:43 · 406 阅读 · 0 评论 -
设计模式-代理模式
五: 代理模式 调用者不能直接访问目标对象,可以通过使用代理访问,在代理中创建目标对象并调用其方法,并做增强 静态代理: 角色:抽象主题(业务接口),具体主题(业务实现),代理 //抽象主题 interface Subject { void Request(); } //真实主题 class RealSubject implements Subject { public void Request() { System.out.println("访问真实主题方法.原创 2021-11-12 17:16:50 · 487 阅读 · 0 评论 -
设计模式-建造者模式
三: 建造者模式 角色: 产品角色: 需要创建的实例对象表示类 抽象建造者: 定义创建产品的方法 具体建造者: 具体创建产品的逻辑 指挥者: 调用建造者创建产品 过程: //产品:客厅 class Parlour { private String wall; //墙 private String TV; //电视 private String sofa; //沙发 public void setWall(String wall) { .原创 2021-11-12 16:56:11 · 196 阅读 · 0 评论 -
设计模式-迭代器模式
迭代器就是用来遍历集合的,有时候需要遍历多个对象中的集合, 但是每个对象中的集合可能不一样,也许是List,也许是Array,也许是其他。 如果把每个对象中的集合都暴露给调用者,耦合性很大,而且也不安全。 比如,一家早餐店的菜单是包子,稀饭,豆浆… 一家午餐店的菜单是炒饭,面条… 对于两家店(两个不同的对象)来说,他们各自的设计是List<MenuItem> 和 MenuItem[] ; 各自有自己遍历菜单的方式。 现在两家合并了,服务员报菜单的时候,难道要分别调用两个对象的遍历方式?...原创 2021-11-10 19:44:13 · 73 阅读 · 0 评论 -
设计模式-模板模式
算法、逻辑大体固定相同,某些逻辑在不同场景下有不同的实现时,可以将公共部分抽取到父类中作为模板实现,其他的由子类实现。 角色: 抽象类/抽象模板,子类(实现特定逻辑) 过程: //抽象类 abstract class AbstractClass { //模板方法 public void TemplateMethod() { SpecificMethod(); abstractMethod1(); abstractMethod2();原创 2021-11-05 16:50:51 · 77 阅读 · 0 评论 -
设计模式-适配器模式
场景:有一些业务接口,客户端想要调用,但是接口没有直接暴露,这时候可以定义一个目标接口提供给客户端,同时,使用一些实现类来分别调用目标接口。 这样,客户端只需要调用一个接口方法(指定不同的实现)就能访问业务接口了。 角色: 适配者(Adaptee)类: 客户端想要访问的真实业务接口 目标(Target)接口: 提供给客户端访问的接口或抽象类 适配器(Adapter)类: 目标接口的实现,其可以注入具体的适配者(继承也行),这样就可以调用具体的适配者方法了 过程: 现在有两个适配者 //适.原创 2021-11-05 16:45:41 · 75 阅读 · 0 评论 -
设计模式-命令模式
调用者发送一个请求,接收者执行请求来实现具体逻辑。 为了解耦,我们将请求封装成一个命令对象。请求者只需要调用命令即可,无需关心调用接收者的哪一个方法 如何实现! 这样,请求者可以同时调用多个命令。 角色: 抽象命令类(Command):声明执行命令的接口,拥有执行命令的抽象方法 execute()。 具体命令类(Concrete Command):抽象命令类的具体实现类,拥有接收者对象,调用接收者的功能来完成具体操作。 接收者(Receiver):命令对象会绑定并调用它来执行具体逻辑。 调用者..原创 2021-11-05 16:23:49 · 112 阅读 · 0 评论 -
设计模式-单例模式
全局只需要一个实例,如Logger日志对象,连接池,线程池,缓存等。 饿汉式: 类加载时候就创建实例,线程安全,但是会浪费内存空间(对象实例很大的时候,如果小当然不在乎),有可能一直用不到该实例。 /** * 饿汉单例 */ public class EHSingleton { private static EHSingleton singleton = new EHSingleton(); private EHSingleton(){原创 2021-11-02 15:52:19 · 60 阅读 · 0 评论 -
设计模式-工厂模式
将对象的创建过程,封装到工厂中,不需要使用者来感知。 简单工厂模式: 适用于创建简单的,固定的几种同类型产品。 角色:抽象产品、具体产品(多种)、一个创建产品的具体工厂类。 /** * 抽象产品-水果 */ public interface Fruit { /** * 描述当前水果是什么 */ void draw(); } /** * 具体产品-苹果 */ public class Apple implements Fruit { @..原创 2021-11-02 15:34:33 · 70 阅读 · 0 评论 -
设计模式-装饰者模式
对于一个对象,不改变原代码的情况下,增添一些额外属性或功能。 角色: 抽象构件: 目标类的接口/父类 具体构件: 目标类 抽象装饰器:继承抽象构件(同目标类实现同一接口),并注入具体构件的实例,便可调用目标类的原方法。 具体装饰器:实现抽象装饰的相关方法,并给具体构件对象添加附加的责任(使用抽象装饰调用目标类的方法之前/之后,添加自己的功能)。 过程: 现在有个接口(抽象构件),它有个实现类,即目标类(具体构件),需要对其方法增强。 //抽象构件角色 interface Compone..原创 2021-11-02 14:46:51 · 46 阅读 · 0 评论 -
设计模式-观察者模式
观察者模式,就是多个对象观察一个对象的行为,当那个对象行为发生变化时,这些对象做相应的逻辑处理。 这和常用的发布订阅,消息监听等一样。 角色: 抽象主题(Subject)角色:也叫抽象目标类,它用于保存所有观察者对象,以及增加、删除观察者对象,此外,还有一个通知所有观察者的抽象方法,由子类实现。 具体主题(Concrete Subject)角色:也叫具体目标类,实现抽象目标中的通知方法,当具体主题的内部状态发生改变时,通知所有注册过的观察者对象。 抽象观察者(Observer)角色:它是一个抽象..原创 2021-07-11 17:06:31 · 62 阅读 · 0 评论 -
设计模式-策略模式
如果有公共行为,可以定义在父类中,达到代码复用。 如果有个人行为,可以定义接口或抽象方法,在实现类中实现。 如果某些行为不想要被复用,又不适合所有对象,就可以定义为策略。 不同的实现类注入想要的策略即可。 策略: /** * 鸭子飞行策略 * * @author: growingduck * @Date: 2021/07/10 */ public interface FlyBehavior { void fly(); } /** * 飞的高 * * @auth..原创 2021-07-10 16:48:10 · 59 阅读 · 0 评论