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. 编程输出例如以 ...
随机推荐
- nginx的下载和安装
安装 下载必要组件 nginx下载地址 http://nginx.org/en/download.html pcre库下载地址,nginx需要[解析正则] http://sourceforge.ne ...
- 论XGBOOST科学调参
XGBOOST的威力不用赘述,反正我是离不开它了. 具体XGBOOST的原理可以参见之前的文章<比XGBOOST更快--LightGBM介绍> 今天说下如何调参. bias-varianc ...
- 经验总结:WebBrowser自动点击弹出提示框alert、弹出对话框confirm、屏蔽弹出框、屏蔽弹出脚本错误的解决办法
经验总结:WebBrowser自动点击弹出提示框alert.弹出对话框confirm.屏蔽弹出框.屏蔽弹出脚本错误的解决办法 网上有好多解决方法,可是不一定好使,本人经过多次试验,针对WebBrows ...
- 拼接两个yuv合帧
http://blog.csdn.net/huahuahailang/article/details/9040847 /**************************************** ...
- T-SQL 之 执行顺序
1.sql查询语句的处理步骤,代码清单 --查询组合字段 (5)select (5-2) distinct(5-3) top(<top_specification>)(5-1)<se ...
- Dbvisualizer设置SQL语句自动提示
Dbvisualizer默认不自动提示SQL语句的命令及查询的表,虽然可以通过Ctrl+/快捷键进行手动调用出提示信息,用习惯了PLSQL Developer难免有些不适应. 设置自动提示方法: 点击 ...
- springboot 的定时任务使用
定时任务在Spring Boot中的集成 在启动类中加入开启定时任务的注解: 在SpringBoot中使用定时任务相当的简单.首先,我们在启动类中加入@EnableScheduling来开启定时任务. ...
- iOS开发基础控件--UISegmentedControl
UISegmentedControl全局外观设置 分段控件是我们常用的控件之一,今天把具体用法总结了下: 1.初始化UISegmentedControl [plain] view plaincopy ...
- 将DataTable中的数据导出成Excel
public bool ExportFile(System.Data.DataTable dt){ SaveFileDialog sfd = new SaveFileDialog(); s ...
- java算法 第七届 蓝桥杯B组(题+答案) 7.剪邮票
7.剪邮票 (结果填空) 如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红 ...