设计模式
骚人贵
这个家伙很懒什么都不愿意写
展开
-
我的java设计模式 总结 汇总与设计原则
文章目录汇总分类创造型结构型行为型面向对象的六大原则1. 单一职责原则 Signle Responsibility Principle2. 开闭原则 Open Close Principle3. 里氏替换原则 Liscov Substitution Principle4. 依赖倒置原则 Dependency Inversion Principle5. 接口隔离原则 Interface Segregation Principle6.迪米特法则 low of demeter汇总最近复习完了23种设计模式原创 2020-07-14 22:26:31 · 124 阅读 · 0 评论 -
我的java设计模式 总结【15】状态模式 State & 解释器 Intepreter
State 状态模式这个也不难,就是根据状态决定行为。简单来说,就是类里面的方法都要判断当前状态,才能知道该如何运行的时候,将这些需要判断状态的方法抽象出来根据不同的状态获取不同的实现来进行执行方法。例举一个原始的方式:public class Old { int state; public Old(int s) { state = s; } public void method1() { switch (state) { case 1: System.out.println原创 2020-07-14 20:50:59 · 120 阅读 · 0 评论 -
我的java设计模式 总结【14】原型 prototype & 备忘录 memento & 模板方法 templateMethod
原型模式其实就是指再创建一个对象时,直接从原有的对象进行copy即可,省去对对象进行new以及以后的赋值操作。在jdk中已经自带了这个模式的功能。就是Object对象的clone 方法。这个方法必须实现空接口Cloneable,再调用Object的clone方法就可以获取一个新的对象。但还需要知道的是浅克隆与深克隆,通常一个复杂点的对象中不光包含了基础的类型还有引用类型的存在。浅克隆只会克隆对象对其中的引用也是进行了copy,但是两对象对其中的对象进行修改后另外一个引用的值也会修改,通常这个是不可以的,原创 2020-07-14 10:18:28 · 164 阅读 · 0 评论 -
我的java设计模式 总结【13】命令模式Command
文章目录命令模式定义优缺点优点缺点一个样例命令模式定义将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。优缺点优点降低系统的耦合度。命令模式能将调用操作的对象与实现该操作的对象解耦。增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类,它满足“开闭原则”,对扩展比较灵活。可以实现宏命令。命令模式可以与组合模式结合,将多个命令装配成一个组合命令,即宏命令。方便实现 Undo 和原创 2020-07-13 18:05:28 · 125 阅读 · 0 评论 -
我的java设计模式 总结【12】构建器 builder & 转换器 wrapper & 桥接 Bridge
文章目录构建器转换器桥接模式构建器构建器builder 是用于构建复杂的对象的,也没什么好解释的,这个很简单;举例来说我要创建一个机器人对象,这个机器人对象非常的复杂。可能有好几十种属性,我可以再创建他的时候一次把这几十种属性都通过构造函数传进去,这种方法不是不可以。但是我可以分开创建 头,身子,胳膊,腿,脚等等,对于复杂的对象进行结构化的创建。常见采用链式编程进行编程。最常见的一般带build语句的都是采用了构建器模式进行的。再使用过程中与模板方法相同的,只是这里的语义针对对象的构建,而模板方法原创 2020-07-13 16:46:32 · 356 阅读 · 0 评论 -
我的java设计模式 总结【11】访问者 Visitor
文章目录访问者意义 与 场景说明访问者意义 与 场景关于访问者模式,用处比较局限。其实就是不改变内部实际运行过程而动态的修改内部属性的一种模式。内部实际运行过程时固定的,但是变量不是固定的。那么对于这种这个不固定的变量而固定的运行过程就是访问者模式了,这个需要先举一个例子,是我用到的真实案例。先介绍一下,我们都知道oracle和mysql的日期格式处理都是不一样的。那么对于数据持久化日期的查询与保存都是不一样的内容,但是对于这个保存或查询时间的动作都是固定的。那么这样我们就可以运用到这个模式了。不同原创 2020-07-13 14:57:03 · 123 阅读 · 0 评论 -
我的java设计模式 总结【10】迭代器 Iterator
文章目录迭代器迭代器关于迭代器来说,这种模式属于容器专属的设计模式了。主要用于遍历容器的。我们都知道对于容器的实现,主要有两种,第一种就是数组,数组的物理地址是连续的,当数组满了以后会扩展数组,这种扩展不是说再原先数组的物理地址上接着往后顺而是,创建一块新的连续内存空间并将原有数据拷贝过来。这样就完成了扩展。第二种是链表,链表的物理地址不是连续的,每个链表对象中最基本的就是有两个属性一个是属性,一个是指向下一个链表元素的指针或者是引用。这样只用把需要添加的元素追加到最后面就行,无需扩容,而只要知道原创 2020-07-13 12:49:44 · 99 阅读 · 0 评论 -
我的java设计模式 总结【9】代理 Proxy ,jdk14中proxy源码简读
文章目录代理模式静态代理动态代理JDK的动态代理实现动态代理的原理JDK14 Proxy 生成代理的源码简读Proxy类 newProxyInstance 源码关于getProxyConstructor 方法关于ProxyBuild 中的build 方法defineProxyClass 创建ProxyClass 的方法ProxyGenerator.generateProxyClass 的实现关于generateClassFile 的实现总结code generate 一个开源的动态代理生成办法。代理模原创 2020-07-08 17:17:13 · 223 阅读 · 0 评论 -
我的java设计模式 总结【8】组合 与 享元 Composite & Flyweight
文章目录Composite 组合模式Composite 组合模式其实关于这个前者网上有很多的介绍,我也只表述一下我自己的看法,就是对于树状类型的设计模式就是这组合模式。目前我们很常见的xml ,json都是层级分明的结构化数据。对于这种xml数据或者json的面向对象编程或者说是将这数据进行对象化的编程模式也是组合模式。当然也意味你需要将实际业务或者需求的数据对象可以进行合理的结构化。而结构化完成后运用合理的组合模式进行开发维护数据对象关系就是这个组合模式的核心。这个模式很容易理解也很简单。再运原创 2020-07-06 20:57:38 · 760 阅读 · 0 评论 -
我的java设计模式 总结【7】 观察者 observer
文章目录observer 观察者模式observer 观察者模式oberserver与chain of responsibility 十分相似,也是调用后出发一系列的工作。但是区别在于观察者是更被动的去执行。最常见与经典的应用就是java 中的 swing组件中的时间处理都是采用这种设计模式进行完成的,当然也有叫什么事件驱动或者说消息订阅,我个人觉得都是一回事。针对于观察者来说,最起码需要有三大类的对象才可以叫观察者模式,第一个事件触发者,就是谁触发或者谁发起了事件,第二个就是观察者,有各式各样不原创 2020-07-06 15:25:00 · 168 阅读 · 0 评论 -
我的java设计模式 总结【6】责任链 Chain Of Responsibility
文章目录责任链模式Servlet Filter中的责任链责任链模式责任链模式,很明显就是链式的处理一系列的任务,一个任务完成再处理下一个,直到链上的任务都完成了。在实际过程中最简单的应用就是对一个字符串的过滤。去掉不同的敏感字符。还有更实际的运用就是j2ee servlet中的Filter 这个应该算是最最经典的应用了。这里可以作为首要案例来分析一下。Servlet Filter中的责任链可以看看源码Filter 与FilterChainFilter 源码public interface Fil原创 2020-07-04 21:37:27 · 142 阅读 · 0 评论 -
我的java设计模式 总结【5】装饰器 Decorator
文章目录装饰器模式 Decorator特点举例JDK中的 Decorator装饰器模式 Decorator特点Decorator 设计模式不会改变原有的东西,只是增加新的外观或者功能,样式等,且随着时间的推移,可以不断的实施修饰操作。在面向对象的程序设计中,扩展系统的原有功能也可以采用继承、组合的方式。继承也不会改变原有类(父类),但是由于工程的复杂和很多不可预测的改变,比如不同业务的数据组合数量简直无法想想,难道我们要为每一种组合都定义一个子类吗?显然这是不现实的,即通过继承的方式来应对未来的功能和原创 2020-07-04 15:33:03 · 1599 阅读 · 0 评论 -
我的java设计模式 总结【4】门面 与 调停者 Facade & Mediator
文章目录门面模式门面模式其实这个设计模式很容易理解,而且也经常用的上,就是一个类似于接口统一组合的方法。很简单举例。你的api接口需要调用后面的很多的service 而不同的service也有很多不同的业务逻辑或者先后顺序的组合,那么就可以通过facade 门面模式来进行统一的管理和维护了。举例来说,添加一个用户,他需要很多的验证,比如姓名,年龄等等其他信息的合法验证。然后再进行数据的添加,以及其他业务关系的关联操作。那么通过facade可以将这类信息的统一验证作为一个facade,数据与数据关系持久原创 2020-07-01 15:11:08 · 222 阅读 · 0 评论 -
我的java设计模式 总结【3】工厂 Factory
文章目录工厂模式简单工厂工厂方法抽象工厂补充工厂模式任何产生对象的方法或者类都可以称之为工厂,工厂就是产生东西的方法。单例也是一种工厂与new的区别可以灵活的控制创建方法可以增加修饰日志输出等简单工厂其实就是很简单的创建对象,或者说根据不同的条件,标识创建不同的对象。参考代码:// 定义一个接口Car public interface Car { String getType();}//根据Car接口来实现两个实现类 //跑车 public class Sport原创 2020-07-01 11:41:12 · 120 阅读 · 0 评论 -
我的java设计模式 总结【2】策略 Strategy
文章目录策略模式举例或场景实现策略模式其实就是对做一件事,有不同的实现方式。这种实现方式就是一种策略,相同的事情不同的策略。举例或场景对数组进行排序:那么排序就是事,而对于排序的实现可以有很多种,可以按照对象不同的属性进行排序,也可以按照不同的算法进行排序,这些都是策略。对对象进行序列化:那序列化就是事,而序列化的不同实现就是不同的策略。比如序列化成json格式。或者xml格式。或者二进制格式等。接口协议:接口就是事,而协议或者数据格式就是策略。比如相同的接口,那么接收不同协议或者数据格式的内原创 2020-06-30 19:41:32 · 115 阅读 · 0 评论 -
我的java设计模式 总结【1】单例 Singleton
文章目录singleton 单例模式几种实现办法第一种 直接初始化第二种 双重检查加锁第三种 静态内部类第四种 枚举实现总结说明singleton 单例模式这个就是单例模式,再一个程序中只能有一个对象实例;或者说唯一的一个对象实例。几种实现办法第一种 直接初始化public class A{ static A a=new A(); private A(){} public static A getInstance(){ return a; }}第二种 双重检查加锁publi原创 2020-06-30 17:48:13 · 150 阅读 · 0 评论