设计模式
吴键
这个作者很懒,什么都没留下…
展开
-
浅谈模式 - 装饰者模式
对象包装对象,目的是功能增强。最常见的JAVA IO。Dubbo,Spring中都有一些wapper类。// 出自Dubbo源码 ProtocolFilterWrapper,版本2.6.4public class ProtocolFilterWrapper implements Protocol { private final Protocol protocol;// 被包装的p...原创 2020-05-08 03:30:16 · 170 阅读 · 0 评论 -
浅谈模式 - 责任链模式
过滤器链,拦截器链public interface IHandler { boolean doIt();}public class Handler1 implements IHandler { @Override public boolean doIt() { System.out.println("handler 1"); ret...原创 2020-05-08 03:29:31 · 175 阅读 · 0 评论 -
浅谈模式 - 享元模式
目的是共享内存中的某些对象资源比如棋类游戏,每个棋子可以作为共享资源public class Chess { private int id; private String text; private Color color; public Chess(int id, String text, Color color) { this.id = ...原创 2020-05-08 03:28:43 · 149 阅读 · 0 评论 -
浅谈模式 - 适配器模式
适配器,属于一种补偿模式,用于补偿原有设计的不足之处。adapter持有adaptee目标对象的委托,对其调用。或者继承关系。继承的方式public class Adaptee { public void method1() { System.out.println("目标方法"); }}public class Adapter extends Adap...原创 2020-05-08 03:28:00 · 176 阅读 · 0 评论 -
浅谈模式 - 模板方法
在抽象层方法中,定义一些列的行为骨架。并且设计好执行顺序(不变的流程)。具体的行为实现,由子类完成。几乎任何一个框架,任何系统在抽象层都要使用模板方法。因为框架的骨架由实体域,服务域,回话域三大块组成。服务域代表的就是流程,流程的控制基本都得用上模板方法。public interface ITemplate { void method1(); void method2();...原创 2020-05-08 03:26:52 · 142 阅读 · 0 评论 -
浅谈模式 - 观察者模式
两种角色. 1.观察者. 2.被观察者被观察这一般会持有一个观察者的列表。当某些相关事件发生之后,循环调用每个观察者触发其update行为。至于观察者的update行为怎么实现,被观察这不关心。这也体现了角色之前行为的解耦。他们的唯一耦合是观察者列表。public interface ISubject { void register(IObserver observer)...原创 2020-05-08 03:25:03 · 202 阅读 · 0 评论 -
浅谈模式 - 代理模式
真实动作的前面和后面分别做一些行为。真实动作使用委托的方式来调用。静态代理public interface Subject { void buyTicket();}public class SubjectImpl implements Subject { @Override public void buyTicket() { System.out...原创 2020-05-08 03:23:19 · 149 阅读 · 0 评论 -
浅谈模式 - 策略模式
在行为级别。把if else,switch替换掉的最好方式。策略类型的存放,有些人喜欢用static map,我喜欢用Enum,我感觉更优雅。Enum作为策略类型,实现类的beanId直接写到Enum中。今后的可扩展点就是新增或者删除实现类,并且对Enum作调整。这边的Enum就相当于是配置了。这边举一个简单的案例,比如要去上海旅游,有3中策略:跑去,开车,飞机。来看代码。public ...原创 2020-05-08 03:22:43 · 167 阅读 · 0 评论 -
浅谈模式 - 桥梁模式
桥梁模式,我觉得是比较难理解的一个模式,它的定义很简单:将抽象和实现解耦,让它们可以独立变化。深刻理解却不容易。网上有很多案例,但这个模式如果以Demo来聊,我觉得无法学到它的精髓。这边以Dubbo中Transporter层的设计来说说桥梁模式。这个模式比较隐晦,挺难理解的。什么是抽象,什么是实现?它这里面的抽象指的不是抽象类或者接口。实现也不是指的具体实现类。我这边来解释下Transport...原创 2020-05-07 23:35:25 · 215 阅读 · 0 评论 -
MyBatis中的设计模式
本篇聊一聊MyBatis所用到的一些设计模式。关于MyBatis一些实现原理,可以参考 MyBatis的Mapper机制1.工场模式关于工场模式的具体原理和实现可以参考 浅谈模式 - 工场模式SqlSessionFactorypublic interface SqlSessionFactory { SqlSession openSession(); SqlSession op...原创 2020-05-07 20:28:41 · 159 阅读 · 0 评论 -
MyBatis-Spring的Mapper机制
关于MyBatis本身的Mapper机制,请参考文档 MyBatis的Mapper机制首先,在没有使用MyBatis-Spring的情况下,我们这么去访问Mapperpublic Student findStudentById(int studentId) { SqlSession sqlSession = MyBatisUtil.getSqlSession(); try {...原创 2020-05-07 20:08:02 · 486 阅读 · 0 评论 -
浅谈模式 - 建造者模式
当某个类的参数过多,构造细节过于复杂时,使用builder模式。build()方法可以做一些参数有效性的校验工作不太好的地方:Builder类会把主类中的参数做一层冗余。这个在内部看来不太好看。也让人觉得不舒服。在外面用的时候确实比较爽。说明这样的爽是有代价的。建造者模式与工场模式的区别:① 建造者模式,重点关注在构造某个类的细节上② 工场模式,重点关注在产品的种类上一家必胜客,可以生产...原创 2020-05-07 14:56:41 · 162 阅读 · 0 评论 -
浅谈模式 - 工场模式
简单工场(使用pulic static T create/getInstance/valueOf(){},把创建对象的细节封装起来)工场方法(针对单一维度)public interface ITypeFactory { IType create();}public interface IType {}抽象工场(针对多个维度,不常用)public interface IType...原创 2020-05-07 14:52:45 · 141 阅读 · 0 评论 -
浅谈模式 - 汇总篇
本篇只是总结下各个设计模式要表达的核心思想。算是我的笔记。创建型单例对于某个类,在进程级别只允许一个实例存在。当然还有多进程间共享单例(一般也不常用)或者线程级别的单例。实现方式:① 恶汉式(最常见,最简单)② 懒汉式(双重检测,为防止指令冲排序,加上volatile)③ 静态内部类(内部类是要在用到时候才加载)④ 使用Enum来实现(反正我是没用过)工场简单工场(使用puli...原创 2020-05-06 22:08:05 · 279 阅读 · 0 评论 -
浅谈模式 - 单例模式
说说我眼中的单例对于某个类,在进程级别只允许一个实例存在。当然还有多进程间共享单例(一般也不常用)或者线程级别的单例。实现方式:① 恶汉式② 懒汉式(双重检测,为防止指令冲排序,加上volatile)③ 静态内部类(内部类是要在用到时候才加载)④ 使用Enum来实现这个设计模式应该谁都懂,没必要多说。细节的资料网上太多。在大部分情况,我会选择恶汉式的实现方式,因为简单嘛,不用动脑子。...原创 2020-05-05 23:59:05 · 160 阅读 · 0 评论