设计模式
吖偶阿浩
心有猛虎,细嗅蔷薇
展开
-
为什么半透明模式不能对同一对象进行多次装饰
为什么半透明模式不能对同一对象进行多次装饰掐准透明模式中的装饰者具体实现类中对于抽象构件方法的实现,Component component,componentSB,componentBB; //全部使用抽象构件定义component = new Window();componentSB = new Scroll...原创 2019-05-26 17:40:07 · 1466 阅读 · 0 评论 -
结合JDK中的API落地观察者模式
观察者模式定义了对象之间的一对多依赖,让多个观察者对象同时监听一个主体对象,当主体对象发生变化时,它的所有依赖者(观察者)都会收到通知并更新,属于行为型模式。观察者模式有时也叫做发布订阅模式。观察者模式主要用于在关联行为之间建立一套触发机制的场景。观察者模式在现实生活应用非常广泛,比如:微信朋友圈动态通知,邮件通知,广播通知。下面以JDK中相关的API来演示:朋友圈类(被观察者):packa...原创 2019-07-20 18:01:12 · 186 阅读 · 0 评论 -
初识模板模式
模板模式的应用场景1.一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。2.各子类中公共的行为被提取出来并集中到一个公共的父类中,从而避免代码重复。以课程创建流程为例:发布预习资料–>制作课件PPT–>在线直播–>提交课堂笔记–>提交源码–>布置作业–>检查作业。NetworkCourse抽象类package template;/**...原创 2019-07-18 07:39:21 · 122 阅读 · 0 评论 -
装饰者模式和适配器模式的对比
装饰者模式最本质的特征是将原有类的附加功能抽离出来,简化原有类的逻辑。抽象的装饰类也是可有可无的。适配器模式和装饰者模式都是属于包装模式,所以对这2个模式进行了一些横向的对比:装饰者模式:是一种非常特别的适配器模式,装饰者和被装饰者都实现了同一个接口,主要目的是为了扩展之后依旧保留OOP关系。满足is-a关系,注重的是覆盖和扩展,属于系统设计前就要考虑的模式。适配器模式:没有层级关系,适配器和...原创 2019-07-20 17:03:10 · 449 阅读 · 0 评论 -
浅谈装饰者模式
装饰者模式的应用场景装饰者模式是指在不改变原有对象的基础上,将功能附加到对象上,提供了比继承更有弹性的替代策略。适用于以下场景:1.用于扩展一个类的功能或给一个类添加附加职责。2.动态的给一个对象添加功能,这些功能可以再动态的撤销。下列以煎饼摊为例(继承模式实现):煎饼类:package decorator;/** * Created by Lenovo on 2019-7-20...原创 2019-07-20 13:42:47 · 134 阅读 · 0 评论 -
重构第三方登录自由适配的业务场景
对于一些老系统应该都有登录接口,但是随着业务的发展和社会的进步,单纯地依赖用户名密码登录显然不能满足用户需求了。现在,我们大部分系统都已经支持多种登录方式,如QQ登录,微信登录,手机登录,微博登录等等,同时保留用户名密码的登录方式。虽然登录形式丰富了,但是登录后的处理逻辑可以不必改,同样是将登录状态保存到session,遵循开闭原则。首先创建统一的返回结果ResultMsg类package ...原创 2019-07-18 14:03:17 · 587 阅读 · 1 评论 -
初识适配器模式
适配器的应用场景适配器模式是指将一个类的接口转换成客户期望的另一个接口,使原本的接口不兼容的类可以一起工作,属于结构型设计模式。适配器适用于以下几个业务场景:1.已经存在的类,它的方法和需求不匹配(方法结果相同或者相似)的情况。2.适配器模式不是软件阶段考虑的设计模式,是随着软件维护,由于产品不同,不同厂家造成功能类相似而接口不相同的情况下的解决方案。下面用代码实现生活中给手机充电使用电...原创 2019-07-18 10:45:56 · 125 阅读 · 0 评论 -
利用模板模式重构JDBC操作业务场景
创建一个模板类JdbcTemplate,封装所有的JDBC操作。以查询为例,每次查询的表不同,返回的数据结构也就不一样。我们针对不同的数据,都要封装不同的实体对象。而每个实体封装的逻辑都不一样的,但是封装前后的处理流程是不变的,因为,我们可以使用模板方法模式来设计这样的业务场景。先创建约束ORM逻辑的接口。RowMapperpackage JDBCTemplate;import java....原创 2019-07-18 09:25:28 · 209 阅读 · 0 评论 -
结合注册式单例设计的策略模式
结合注册式单例设计的策略模式业务场景为:各种促销活动,多种促销策略首先创建一个促销策略的抽象package strategy;/**促销策略抽象Created by Lenovo on 2019-7-15.*/public interface PromotionStrategy {void doPromotion();}创建我们的各种促销策略package strate...原创 2019-07-15 16:58:59 · 171 阅读 · 0 评论 -
浅谈利用原型模式进行代码重构
原代码:(将一个对象中的值赋到另一个对象中)public void setParam(ExamPaperVo vo){ ExamPaper examPaper = new ExamPaper(); //试卷主键 examPaper.setExaminationPaperId(vo.getExaminationPaperId()); //剩余时间 curForm.setLeavTime(examP...原创 2019-07-01 09:48:25 · 388 阅读 · 0 评论 -
为什么JDK动态代理中要求目标类实现的接口数量不能超过65535个
先明确几个概念:Class文件是一组以8字节为基础单位的二进制流各个数据项目严格按照顺序紧凑排列在class文件中中间没有任何分隔符,这使得class文件中存储的内容几乎是全部程序运行的程序Java虚拟机规范规定,Class文件格式采用类似C语言结构体的伪结构来存储数据,这种结构只有两种数据类型:无符号数和表接口索引计数器(interfaces_count),占2字节参考第一句话:cl...原创 2019-07-11 09:18:02 · 2905 阅读 · 3 评论 -
委派模式的定义以及应用场景
委派模式的定义及应用场景例如:老板(Boss)给项目经理(leader)下达任务,项目经理会根据实际情况给每个员工派发工作任务,待员工把工作任务完成之后,再由项目经理汇报工作进度和结果给老板。下面用代码模拟下这个业务场景 。相关的类图创建IEmploye员工接口:package delegate;/**Created by Lenovo on 2019-7-15.*/publ...原创 2019-07-15 14:39:10 · 695 阅读 · 0 评论 -
浅谈单例模式
1.每种单例写法的优缺点:饿汉式单例:在类加载的时候就立即初始化,并且创建对象。绝对线程安全,在线程还没出现以前就是实例化了,不可能存在访问安全问题。优点:没有加任何锁,执行效率比较高,在用户体验上比懒汉式更好。缺点:类加载的时候初始化,不管用不用得着都要占用内存,适合整体项目单例对象比较少的情况。懒汉式单例:被外部类调用的时候内部类才会加载。懒汉式单例存在线程安全问题,所以在方法上加锁进...原创 2019-06-30 17:57:20 · 124 阅读 · 0 评论 -
浅谈工厂模式
一.简单工厂的UML图(未优化)优化后工厂方法模式UML图:抽象工厂模式UML图:二.产品等级相当于后面增加的录播,课堂的接口,扩展产品族的产品等级Java课程video以及Python课程video。三.简单工厂模式:使用了简单工厂模式后,相比不使用工厂模式,隐藏了实现类的细节,客户端的调用简单了 ,但是如果要新增业务,Create中就需要根据产品链进行代码的修改,不符合开闭原...原创 2019-06-30 17:56:08 · 110 阅读 · 0 评论 -
记录:结合静态代理对分表分库数据源实现动态设置
根据订单创建时间自动按年分库订单类:package DBSource;/**Created by Lenovo on 2019-7-2.*/public class Order {public Object orderInfo;public Long createTime;public String id;public Long getCreateTime() {retu...原创 2019-07-02 11:10:12 · 228 阅读 · 0 评论 -
Spring中常用的设计模式及编程思想
工厂模式只对结果负责,封装创建过程。例:BeanFactory,Calender单例模式保证独一无二。例:ApplicationContext,Calender原型模式拔一根猴毛,吹出万千个。例:ArrayList,PrototypeBean代理模式找人办事,增加职责。例:ProxyFactoryBean,JdkDynamicAopProxy、CglibAopProxy委派模式干...原创 2019-07-28 13:15:08 · 183 阅读 · 0 评论