
设计原则与模式
岁月人
极客精神,热衷源码探索,持续学习
跟随云原生脚步,探索深度学习方向
展开
-
代理模式之动态代理高级篇
动态代理产生原因之作者意淫设计模式中:装饰者模式,代理模式以及java原生的继承都可以实现增强目标对象的功能不管是静态代理,继承还是装饰者模式在设计模式中都存在类爆炸问题作者[基于jdk的动态代理]意淫: 前人发现代理模式的主要目的是在原执行方法的前后做【访问控制(设计模式)】;于是通过Java的类加载器编译器的功能,在定义统一的接口InvokeHandler ,从而封装了手写动态代理...原创 2019-12-26 22:17:36 · 178 阅读 · 0 评论 -
设计原则与模式 017 备忘录模式
备忘录模式的定义:在不破坏封装性的前提下,捕捉一个对象的内部状态,并在该对象之外保存这个状态,以后可以将对象恢复到原先保存的状态;备忘录模式分为外部备忘录模式和内部备忘录模式外部备忘录模式其UML类图如下:手机备忘举例: 其中Originator表示被备忘信息,Memento表示备忘记录,Caretaker表示备忘录app之类使用场景:需要保存和恢复相关现场的场景,VM的快...原创 2019-12-09 18:46:27 · 208 阅读 · 0 评论 -
设计原则与模式016门面模式
门面模式也叫着外观模式:要求一个子系统的外部与其内部的通信必须通过一个统一的接口。该接口不允许任何访问子系统的行为发生;注意子系统是一种泛称,在项目中可能是一个模块的代码,也可能是一个类,其中controller—>service可以从某种程度上看做是一种外观模式,依赖方只需要调用controller即可,而不用关注service层的具体业务逻辑其UML类图如下门面模式...原创 2019-12-09 16:52:47 · 193 阅读 · 0 评论 -
设计原则与模式015 观察者模式
观察者模式:发布订阅模式,定义对象一种一对多的关系,使得每当一个对象改变状态则所有依赖于它的对象都会得到通知并被自动更新。其UML类图如下:以下统一使用发布订阅来明确职责,subject也就是发布者负责增减订阅者,同时规定订阅者监听情况订阅者负责实现相关订阅逻辑:优点:订阅者与发布者之间是抽象的,相互解耦的;不管是增加具体的订阅者,具体的发布者,基于里式替换原则,非常容易扩展...原创 2019-12-09 14:13:05 · 619 阅读 · 1 评论 -
设计原则与模式014 迭代器模式
迭代器模式: 提供一种方法访问一个容器中的各个对象,同时不需要暴露该对象的内部细节其uml图如下作为一个java讲迭代器模式并不是纯粹的说这个模式,而是让大家加深对Iterator接口的理解,Collection如何接口迭代器接口;单从java语言的角度来说,这个模式甚至由设计模式转变成了一种工具;这个模式在java中基本成为了工具,所以不推荐独自设计开发,可以通过该模式来了解...原创 2019-12-09 01:58:00 · 136 阅读 · 0 评论 -
设计原则与模式013 适配器模式
适配器模式的定义: 将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法工作的两个类能够在一起工作;适配器模式的UML图如下,适配器需要将Adaptee被适配者与target结合,从而使得客户端能够完成对不兼容对象adaptee的兼容调用类适配器: 通过继承完成适配[存在一个被适配者]对象适配器:通过关联关系完成适配:[从在多个被适配者]通过依赖注入,注入多...原创 2019-12-08 14:55:14 · 318 阅读 · 0 评论 -
设计原则与模式012 装饰者模式
装饰者模式:动态的给对象增加一些额外的职责,就增加功能来说装饰者比子类继承更加灵活其UML类图如下其中component为被装饰者接口,Decorator为装饰者,装饰者实现类负责增加额外的功能/方法对原功能进行装饰装饰者的UML图告诉我们,装饰者实现和被装饰者实现都有相同的功能,同时装饰者在原有功能的基础上增加部分功能其核心的实现在于Decotator.operation()...原创 2019-12-07 22:58:29 · 101 阅读 · 0 评论 -
设计原则与模式011 责任链模式
责任链模式: 责任链的核心是通过模板方法定义处理请求,从而使多个对象都有机会处理请求,避免请求与发送者和接受者之间的耦合关系,并将这些对象串成一条链在这个链上有机会处理请求;由此可见,责任链的关键在于模板方法,以及next对象,如何处理这个链,是否处理四个关键要素其核心代码如下:调用时可以采用另外一个类定义chain结构【设置next】,链上第一个节点调用template,从而启动链...原创 2019-12-07 21:29:49 · 216 阅读 · 0 评论 -
设计原则与模式009 中介者模式
中介者模式:名如其义:其核心设计原则是迪米勒法则;通过中介者降低彼此模型之间的沟通1产生场景中介者模式场景介绍: 假设有一个进销存模型,进货是根据销售情况决定,同时进货会影响库存;最开始的流程伪代码涉及如下实体如下Stock[库存]Saler[销售]Buyer[采购]比如销售:saler.sale(int num){ if (!Stock.ok){ // 库存...原创 2019-12-07 15:51:42 · 194 阅读 · 0 评论 -
设计原则与模式007原型模式
原型模式:根据原有对象,拷贝这些对象并创建新的对象注意事项:原型模式是在内存进行二进制的copy,并不通过构造函数创建;clone对基本型,String(string看作deep copy)进行深拷贝,对数组和引用对象进行浅拷贝浅拷贝转深拷贝private ArrayList<Integer> integers = new ArrayList();// 对象有如...原创 2019-12-06 03:43:49 · 159 阅读 · 0 评论 -
设计原则与模式004模板方法
模板方法定义:定义一个操作中的算法框架,而将步骤延迟到子类之中,子类不改变算法的结构即可改变算法的某些特性。也就是说可以对一些复杂的算法进行分割,将其算法中固定不变的部分设计为模板方法并将共性行为提成父类具体方法,而一些可以改变的细节由其子类来实现。即一次性实现一个算法的不变部分,并将可变的行为留给子类来实现。同时通过子类钩子行为实现子类对父类的反向控制,来决定算法的执行步...原创 2019-12-04 12:55:45 · 167 阅读 · 0 评论 -
设计原则与算法单例模式
饿汉public class Singleton { private static Singleton singleton=new Singleton(); private LazySingleton() { } public static Singleton getInstance() { return singleton;...原创 2019-12-03 01:22:29 · 182 阅读 · 0 评论 -
设计原则与模式001 大话设计原则
感悟:很多人看设计模式时可能忽略了设计原则,包括笔者自己;笔者自己工作经历的项目到现在,基本都违背了设计原则;为什么设计原则如此重要,就像最近几年出现的中台概念一样,设计原则本质作用就是如何设计以及设计的原则;面向接口编程,为什么面向接口,什么样的接口是设计较ok的,为什么spring源码中很多都是接口+抽象类+实现类的这种设计style?开闭原则开闭原则:开放扩展,关闭修改;开...原创 2019-11-30 23:27:47 · 155 阅读 · 0 评论