java-设计模式汇总整理
最近,对各种模式做了一个整理,便于后续自用。
1、工厂模式
总结:很好理解,一个接口,2个类实现这个接口,那么可以用“接口 变量=new 接口实现类”的方式调用不同的实现类,调用方式直接使用接口的方法就完成了不同实现类的业务调用。
2、抽象工厂
总结:工厂模式的一种变形。
3、单例模式
总结:防止过度的new引用,在引用的时候判断是否已完成实例化,如已完成则不再new而是直接返回。
12、享元模式
总结:单例模式的集合版。单例模式是返回一个对象的实例化,而享元模式是把各种单例存储到一个集合中,当发生调用时从这个集合取得单例并返回。
13、策略模式
总结:很类似工厂模式,但工厂模式返回实现的接口类,而策略模式是在外部就确定了要使用哪个实现类来执行指定的方法。
20、状态模式
总结:很类似工厂模式,但工厂模式返回实现的接口类,而状态模式是在内部经过传入的条件判断后返回实现接口类的指定方法。
解释:相当于If else if else;设计路线:各个State类的内部实现(相当于If,else If内的条件),执行时通过State调用Context方法来执行。 状态模式是让各个状态对象自己知道其下一个处理的对象是谁,即在编译时便设定好了的;
4、建造者模式
总结:类似外观模式,提供按照顺序的外观模式。但与外观模式的区别是外观模式不关注顺序,而建造者要关注执行的顺序本身。
9、外观模式
总结:为子系统中的一组接口提供一致的界面,fade提供了一高层接口,这个接口使得子系统更容易使用。
11、组合模式
总结:组合模式也很类似外观模式和建造者模式,但是不一样的地方是建造者关注顺序本身,外观模式关注各个方法实现就可以,组合模式关注各个方法实现的结果并做对应处理。
22、中介者模式
总结:类似外观模式,但关注行为的提供。
7、装饰模式
总结:动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。
8、代理模式
总结:为其他对象提供一种代理以控制对这个对象的访问。例一个接口A及A的实现类B,那么可以定义实现类C,C除实现A的方法外还保留其他方法的提供,那么使用者可以直接使用C,其中A接口的实现的方法可以由C来提供。
看到现在,我们会觉得装饰模式和代理模式是很像的,那么区别在于什么地方?装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。换句话 说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例。并且,当我们使用装饰器模 式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器。
18、命令模式
总结:把最终实现接口类的行为再次接口化,使用者调用再次接口化的接口并传入实现者以实现行为。
5、原型模式
总结:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。
6、适配器模式
总结:定义一个接口A,比如接口有方法AA,抽象类B含有AA方法及AAA方法,那么我们想用A接口的实现的方法及B类中的AAA方法时,可以创建一个类C继承抽象类B,并且实现接口A,那么在使用C的时候就可以用到接口A里面的AA方法(非B里面的AA方法)及B里面的AAA方法。
10、桥接模式
总结:
14、模板模式
总结:
15、观察者模式
总结:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。
16、迭代子模式
总结:
17、责任链模式
总结:通过接口实现并在实现内部可以传入接口实现,以此类推,在实现调用时可以呈现线性传递的方式。
解释:相当于Swich case 设计路线:客户设定,每个子类(case)的参数是下一个子类(case)。使用时,向链的第一个子类的执行方法传递参数就可以。而职责链模式中的各个对象并不指定其下一个处理的对象到底是谁,只有在客户端才设定。
19、备忘录模式
总结:在不破坏对象的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
21、访问者模式
总结:很少用,未精读理解。
23、解释器模式
总结:很少用,未精读理解。
各种总结:
中介模式和外观模式的区别:首先中介者模式将多对多的相互作用转化为一对多的相互作用(也就是各个系统可以互相作用,注意这里强调的是各个系统之间的作用,为了简化这些子系统间的作用,就采用中介者模式)
然而外观模式模式(Facade模式)提供一个高层次的接口,使得子系统更易于使用(注意这里强调的是为了让外部更容易使用这些子系统,所以统一放在一个对象中)
2.外观模式是结构型模式,中介者模式是行为型模式。
3.外观模式是对子系统提供统一的接口,中介者模式是用一个中介对象来封装一系列同事对象的交互行为。
4.外观模式协议是单向,中介者模式协议是双向。
5.外观模式所有的请求处理都委托给子系统完成,而中介者模式则由中心协调同事类和中心本身共同完成业务
策略模式和命令模式的区别:策略模式和命令模式的其中一个最大区别,是在于:策略模式对付的问题域通常是一个,就是说,多个策略只是处理同一个问题,而命令模式对付的是多个问题域,就是很多不同的命令来做不同的事情。简单点来说就是前一个是封装算法 后一个是封装动作。
=====================================================
补充另一片文章对设计模式的理解
设计模式是不分语言的;前辈们总结出来的设计模式分:3种类型及23种模式:
设计模式主要分三个类型:创建型、结构型和行为型。
其中创建型有:
一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点
二、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。
三、Factory Method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。
四、Builder,建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。
五、Prototype,原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。
行为型有:
六、Iterator,迭代器模式:提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。
七、Observer,观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。
八、Template Method,模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。
九、Command,命令模式:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。
十、State,状态模式:允许对象在其内部状态改变时改变他的行为。对象看起来似乎改变了他的类。
十一、Strategy,策略模式:定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户。
十二、China of Responsibility,职责链模式:使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系
十三、Mediator,中介者模式:用一个中介对象封装一些列的对象交互。
十四、Visitor,访问者模式:表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。
十五、Interpreter,解释器模式:给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
十六、Memento,备忘录模式:在不破坏对象的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
结构型有:
十七、Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性。
十八、Facade,外观模式:为子系统中的一组接口提供一致的界面,fa?ade提供了一高层接口,这个接口使得子系统更容易使用。
十九、Proxy,代理模式:为其他对象提供一种代理以控制对这个对象的访问
二十、Adapter,适配器模式:将一类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作那些类可以一起工作。
二十一、Decrator,装饰模式:动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。
二十二、Bridge,桥模式:将抽象部分与它的实现部分相分离,使他们可以独立的变化。
二十三、Flyweight,享元模式
java-设计模式汇总整理的更多相关文章
- Java设计模式汇总
Java设计模式汇总 设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式. ...
- Java设计模式知识整理
1.Java设计模式 Java设计模式分为三种类型,分别是: ①.创建型设计模式:是对对象创建过程的各种问题和解决方案的总结 包括:静态工厂模式.抽象工厂模式.单 ...
- GJM : C#设计模式汇总整理——导航 【原创】
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
- Java设计模式学习资源汇总
本文记录了Java设计模式学习书籍.教程资源.此分享会持续更新: 1. 设计模式书籍 在豆瓣上搜索了一把,发现设计模式贯穿了人类生活的方方面面.还是回到Java与程序设计来吧. 打算先归类,再浏览,从 ...
- JAVA 设计模式 模板方法模式
定义 模板方法模式 (Template Method) 定义了一个操作中的算法的骨架,而将部分步骤的实现在子类中完成. 模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模 ...
- Java知识汇总——思维导图
转载:https://www.cnblogs.com/java1024/p/8757952.html Java知识点汇总,从基础到常用的API.还有常用的集合类,总结的很详细.图片是从论坛里面找到的, ...
- Java 架构知识点整理
架构学习 1. Java 核心技术 1.1. 基础知识 1.1.1. 进制转换 1.1.2. 异常处理 1.1.3. List 分批代码 1.1.4. 字符串分割 1.1.5. 编码风格 1.2. 并 ...
- 12天,这本《重学Java设计模式》PDF书籍下载量9k,新增粉丝1400人,Github上全球推荐榜!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言
- 浅析JAVA设计模式(一)
第一写技术博客,只是想把自己一天天积累的东西与大家分享.今天在看<大型网站架构和java中间件>这本书时,其中提到代理模式的动态代理.作为java中间件的一个重要基础,我觉的有必要整理和分 ...
- 尚学堂Java面试题整理
博客分类: 经典分享 1. super()与this()的差别? - 6 - 2. 作用域public,protected,private,以及不写时的差别? - 6 - 3. 编程输出例如以 ...
随机推荐
- openStack nova nova valid hosts 优化
scheduler_default_filters=AllHostsFilterallow_resize_to_same_host=Trueallow_migrate_to_same_host=Tru ...
- sql查询语句常用例子
1.查找与jams在同一个单位的员工姓名.性别.部门和职称:select emp_no, emp_name, dept, title from employee where emp_name< ...
- C#中如何判断线程当前所处的状态
转自原文 在C#中如何判断线程当前所处的状态 在C#中,线程对象Thread使用ThreadState属性指示线程状态,它是带Flags特性的枚举类型对象. ThreadState 为线程定义了 ...
- AOP的MethodBeforeAdvice
使用Spring自动生成代理类,spring利用的是动态代理机制 接口 Java代码 public interface UserDao { void addUser(); void deleteUse ...
- axis2 webService开发指南(3)
复杂对象类型的WebService 这次我们编写复杂点的WebService方法,返回的数据是我们定义属性带getter.setter方法JavaBean,一维数组.二维数组等 1.服务源代码 新建一 ...
- Java核心知识点 --- 线程中如何创建锁和使用锁 Lock , 设计一个缓存系统
理论知识很枯燥,但这些都是基本功,学完可能会忘,但等用的时候,会发觉之前的学习是非常有意义的,学习线程就是这样子的. 1.如何创建锁? Lock lock = new ReentrantLock(); ...
- Color, Material, Lighting
[Color, Material, Lighting] The material and lighting parameters are used to control the built-in ve ...
- SQL的3个主要组成
SQL语言包含3个部分:数据定义语言(DDL),数据操作语言(DML),数据控制语言(DCL) 数据定义语言(DDL) 数据定义语言用于定义和管理对象,例如数据库.数据表及视图等.典型代表有CREAT ...
- http协议简析(一)
HTTP:hype-text transfer protocol,超文本传输协议,超文本(html)在网络间(电脑与电脑之间)传输过程中所遵循的一些规则. 两台电脑之间要实现数据传输的条件 1.两台电 ...
- Python学习笔记_从CSV读取数据写入Excel文件中
本示例特点: 1.读取CSV,写入Excel 2.读取CSV里具体行.具体列,具体行列的值 一.系统环境 1. OS:Win10 64位英文版 2. Python 3.7 3. 使用第三方库:csv. ...