设计模式
咔咔学长i
一个普通的Java爱好者
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JDK动态代理介绍与使用
一、介绍 JDK动态代理是代理模式的一种实现方式。因为它是基于接口来做代理的,所以也常被称为接口代理。在JDK动态代理中有两个重要的角色:InvocationHandler(Interface)用户实现这个接口,用来编写代理类处理的核心逻辑。Proxy(Class)用来创建一个代理实例,此时需要用到上面自定义的InvocationHandler。二、功能 动态代理拥有代理模式的基本功能,如:调用真实方法的预处理、模块化通用功能。除此之外,还可以在运行时动态创建代理对象,无需针对每个接口原创 2020-06-26 13:05:18 · 997 阅读 · 0 评论 -
CGLIB动态代理使用介绍
一、前言 说到动态代理,开发者们第一时间想到的就是JDK动态代理和cglib动态代理。了解Spring的同学应该知道,Spring AOP功能的底层实现,就是使用的这两种动态代理。两者区别JDK的动态代理机制只能代理实现了接口的类,而没有实现接口的类就不能实现JDK的动态代理;cglib动态代理是针对类来实现代理的,它的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强。使用cglib实现动态代理,完全不受代理类必须实现接口的限制。cglib底层采用ASM字节码生成框架,使用字节码技术生原创 2020-06-27 14:09:44 · 4128 阅读 · 0 评论 -
责任链模式:来自玩家的投诉
一、模式定义责任链模式使多个对象都有处理请求的机会,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象串成一条链,并沿着这条链一直传递该请求,直到有对象处理它为止。相关组件Handler:抽象处理器,对处理请求的方法进行抽象,并定义一个方法来返回对下一个处理者的引用。ConcreteHandler:具体处理者,持有下一个处理者的引用。接到请求后,可以选择将请求处理掉,或者将请求...原创 2019-08-11 14:18:47 · 330 阅读 · 0 评论 -
生成器模式:创建英雄
一、模式定义生成器模式又名建造模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。相关组件Builder:为创建一个Product对象的各个部件定义指定的抽象方法,并提供一个返回该Product的方法。ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件。Director:导演类,用于指...原创 2019-08-10 18:33:29 · 371 阅读 · 0 评论 -
状态模式:豹女的技能设计
一、模式定义状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。相关组件State:所有具体状态类的共同接口,使用这个接口声明当前状态对象,就能指向任意具体状态类。ConcreteState:具体的状态类,处理来自Context的请求;每个ConcreteState都提供了它自己对于请求的实现。所以,当Context改变当前状态对象时,行为也跟着改变。Cont...原创 2019-07-28 12:50:11 · 286 阅读 · 0 评论 -
组合模式:多级好友列表展示
一、模式定义组合模式允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。相关组件Component:组合中所有对象定义的一个接口(或抽象类)。Leaf:叶节点没有孩子。Composite:包含一个或多个子节点的组件。Client:客户端。二、举例说明场景:当对象的结构需要树形方式来表示时,使用组合模式。需求:为了更细...原创 2019-07-27 14:12:08 · 345 阅读 · 0 评论 -
代理模式:英雄的普攻和技能伤害值统计
一、模式定义代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问。相关组件Subject:Proxy和RealSubject都实现这个接口,以供客户端可以像处理RealSubject一样处理Proxy。RealSubject:真正做事的对象,Proxy会控制对RealSubject的访问。Proxy:代理类,持有Subject的引用,必要时可将请求转发给Subject。另...原创 2019-08-04 11:58:28 · 383 阅读 · 0 评论 -
迭代器模式:打印不同类型的比赛记录
一、模式定义迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。设计原则一个类应该只有一个引起变化的原因(尽量让每个类保持单一责任)解释:聚合对象只负责维护元素数据,把在元素之间游走的责任交给迭代器。相关组件Iterator:迭代器接口,所有迭代器都需要实现的接口;通常包含一些可以在集合元素之间游走的方法,如:hashNext()、next()Con...原创 2019-07-20 22:09:22 · 192 阅读 · 0 评论 -
命令模式:塞拉斯的大招
一、模式介绍命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。相关组件Client:客户端,负责创建命令并设置其接收者。Invoker:调用者,持有一个或多个命令对象,并在某个时间点调用命令对象的execute方法。Command:命令接口,包含execute、undo方法;做日志记录恢复用途时,还可以包含store、loa...原创 2019-07-07 14:23:31 · 622 阅读 · 0 评论 -
单件模式:峡谷中的商店
一、模式介绍单件模式确保一个类只有一个实例,并提供一个全局访问点。相关组件Singleton:单例组件这个模式比较简单,只有一个组件。二、举例说明场景:常被用来管理共享的资源,例如数据库连接或者线程池。具体需求:召唤师峡谷中当英雄第一次访问商店时,创建这个商店,供以后所有的英雄使用。三、代码实现单例 商城public class Store { privat...原创 2019-06-29 21:57:31 · 466 阅读 · 0 评论 -
模板方法模式:演示英雄的伤害技能
一、模式定义模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。设计原则好莱坞原则,别调用我们,我们会调用你。其中“我们”是指高层组件,如父类;“你”是指低层组件,如子类。相关组件AbstractClass:抽象类,包含模板方法、钩子函数。模板方法一般是final的,不能由子类重新定义;钩子...原创 2019-07-14 17:39:47 · 252 阅读 · 0 评论 -
外观模式:购买英雄
一、模式定义外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。设计原则最少知识原则:只和你的密友谈话。相关组件Client:使用外观模式的客户。Facade:外观,将一个或数个类的复杂操作隐藏,暴露出一个统一的接口易于使用。OtherSystem:其他子系统,或者说是其他类。二、举例说明场景:一个业务包含多个操作,应把...原创 2019-07-14 16:11:29 · 317 阅读 · 0 评论 -
适配器模式:兼容外来的猴子
一、模式介绍适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。相关组件Client:客户只看到目标接口。Target:适配器实现的目标接口。Adapter:适配器,使用组合方式包装被适配者。Adaptee:被适配者,所有的请求都委托给这个类。二、举例说明场景:通过创建适配器进行接口转换,让不兼容的接口变成兼容。具体需求:目前峡...原创 2019-07-13 14:08:36 · 343 阅读 · 0 评论 -
抽象工厂模式:不同的模式,创建不同强度的英雄
一、模式介绍抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。设计原则依赖抽象,不要依赖具体类。相关组件Abstract Factory :抽象工厂,定义创建一系列产品对象的操作接口。Concrete Factory :具体的工厂,实现抽象工厂定义的方法,具体实现一系列产品对象的创建。Abstract Product :定义一类产品对象的接口。...原创 2019-06-01 21:49:53 · 307 阅读 · 0 评论 -
工厂方法模式:创建不同类型的英雄
工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。举例说明场景:根据名称创建一个英雄,并释放这个英雄的大招。英雄池中的数量可能会不断增加或者减少。具体需求:现在射手类的英雄有27位,随着游戏版本的迭代会增加或者移除这些英雄。现需要根据英雄的名称,创建一个对应的英雄,并释放该英雄的大招。每个英雄释放大招的步骤都一样,但这个过程比较复杂,不希...原创 2019-05-25 19:23:09 · 837 阅读 · 0 评论 -
装饰者设计模式:盖伦所受到的伤害值
装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比集成更有弹性的代替方案。设计原则类应该对扩展开放,对修改关闭举例说明场景:在不修改现有代码的情况下,给对象搭配新的行为。具体需求:英雄作战时,会受到敌方英雄各种各样的技能攻击,相应的英雄生命值逐渐降低。请设计一个可扩展的程序,来计算当前英雄受到攻击后的当前生命值,最好描述出英雄所受到的伤害。抽象出一个基础组件(Her...原创 2019-05-12 18:35:16 · 306 阅读 · 0 评论 -
观察者设计模式:索拉卡的R技能
观察者模式:在对象之间定义一对多的依赖,这样以来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。设计原则:为交互对象之间的松耦合设计而努力举例说明场景:LOL中有一个英雄名字叫索拉卡,当这个英雄释放R技能时,会使其队友回血。需求:实现当索拉卡执行R技能时,给队友回血。1.定义一个被观察的接口Observable(也叫主题:Subject),并让索拉卡实现此接口...原创 2018-11-17 14:32:32 · 441 阅读 · 0 评论 -
策略设计模式:英雄死亡之后的处理
策略模式:定义算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。设计原则封装变化 多用组合,少用继承 针对接口编程,不针对实现编程举例说明场景:在LOL中有140个英雄,大部分英雄在死亡之后,屏幕变黑;而另一些英雄在死亡后,可以继续释放技能。需求:增加英雄死亡之后的表现行为方法。1.封装变化,把死亡之后的这两种行为封装成两个策略类;同时...原创 2018-11-14 20:46:37 · 358 阅读 · 0 评论
分享