Java--设计模式心得体会
1、策略模式:
策略模式就是将能够通用的算法,封装成不同的组件,实现同一个接口,使之可以互换。
例子:SpringMVC的9大组件,都采用策略模式。比如HandlerMethodArgumentResolver,有非常多不同的实现类,这些实现类都可以互相替换来处理不同类型的参数,这就是策略模式。
策略模式与模板方法模式的区别:比如一个抽象类有一个抽象方法,每个实现该抽象方法的具体实现都不同,就是模板方法模式,一般在抽象类中会有逻辑处理,只是用到了抽象的模板方法时,交给具体的子类去不同实现。
如果一个模板方法,被子类实现时,实现方式大都相同,比如模板方法为处理字符(10个子类可能只有两种实现,一种是处理为UTF-8,一种是处理成GBK),那么这个模板方法就应该使用策略模式。
2、观察者模式:
观察者模式就是将“观察者”注册给“被观察者”,当被观察者发生改变时,能够及时的通知所有观察者。
例子:比如listener或者事件触发等,都是观察者模式
3、装饰者模式:
装饰者模式就是在不必改变原类文件和使用继承的情况下,动态的扩展对象的的功能。比如你有一个真实对象,有一个包装对象,两个对象都必须实现同一个接口A;但是在进行包装的时候,包装对象需要引用真实对象,然后在真实对象的基础上进行功能扩展,最后返回的都是接口A的对象。但是已经被包装过了,扩展了功能。
例子:Java里面的Inputstream与OutputStream就是典型的装饰者模式。
4、工厂方法模式
工厂方法模式就是定义一个创建对象的接口,里面有一个创建对象的方法。通过继承或者实现,将对象的创建交给子类。而调用者只用使用接口就可以了,不用关心具体的对象是怎么创建出来的。
5、抽象工厂模式
抽象工厂模式就是定义一个为创建一组(多个)相关或者相依赖的对象的接口,而调用者无需关心具体的创建对象的实现类。
工厂方法模式与抽象工厂模式的区别:当抽象工厂模式定义的接口中只能创建一个对象,那么“抽象工厂模式”就退化成为了“工厂方法模式”。
6、单例模式
单例模式这个就不多说了,哈哈,地球人都知道。
7、命令模式
命令模式就是把请求封装成命令对象,“调用者”就是将“命令对象”传递给“处理对象”。
8、适配器模式
适配器模式就是将一个接口转换成为另一个接口。
9、外观模式
外观模式提供了一个统一的接口,用来访问系统中的一群接口。外观模式定义了一个高层接口,让使用变得更加容易(不用再去调用一群接口,外观接口已经将一群接口封装好了)。
10、模板方法模式
模仿方法模式定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。
(让子类来实现具体的抽象方法)
11、迭代器模式
迭代器模式就是Iterator接口,使得客户可以顺序得访问对象中的各个元素,又不暴露对象内部的细节。
12、组合模式
当你将对象的组合(多个对象)组成树结构来展现,那么不管你这个对象是节点(还包含子节点),还是叶子节点(不包含子节点),都可以用一致的方式进行处理。
13、状态模式
状态模式是指当前对象把处理自己不同状态的的行为对象,都封装成为自己的属性。当状态发生改变时,调用不同的行为对象,执行不同的操作。(看起来就好像类发生了改变一样)
14、代理模式
为另一个对象提供一个替身或占位符以访问这个对象(包装一个对象,并控制对它的访问)
15、复合模式
复合模式结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题。(MVC模式就是典型的符合模式;其中Model是观察者模式,发生改变后通知View;View是组合模式,通过各种不同的组件嵌套组成一个完整的View展现用户界面;Controller是策略模式,不同的View可以使用不同的Controller处理不同的业务)
16、桥接模式
17、建造者(生成器)模式
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。Spring里面的FactoryBean就是建造者模式
18、责任链模式
使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。(责任链就是一个链表结构,头结点处理完成以后再决定是否要交由下一个节点继续处理,直到没有下一个节点或者其中对象终止责任链)
19、蝇量模式(享元模式)Flyweight Pattern
享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。
应用实例: JAVA 中的 String,如果有则返回,如果没有则创建一个字符串保存在字符串缓存池里面。
20、解释器模式
21、中介者模式
中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。
22、备忘录模式
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。
应用实例: 1、后悔药。 2、打游戏时的存档。 3、Windows 里的 ctri + z。 4、IE 中的后退。 4、数据库的事务管理。
23、原型模式
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
应用实例: 1、细胞分裂。 2、JAVA 中的 Object clone() 方法。3、Java序列化与反序列化可以实现深度克隆
24、访问者模式
访问者模式拥有访问者类,与被访问元素类。元素类通过接受访问者类对象,并且将自身的引用交给访问者,这样访问者就可以使用元素类。
/**
*ComputerPart就是被访问的元素
*ComputerPart通过accept方法接收访问者
*ComputerPartVisitor就是访问者
*/
public interface class ComputerPart {
public void accept(ComputerPartVisitor computerPartVisitor);
} /**
*Keyboard就是被访问的元素
*Keyboard实现ComputerPart接口,通过accept方法接收访问者
*Keyboard通过回调访问者computerPartVisitor的visit方法,将自身对象*传给访问者,访问者便可以使用被访问的元素了
*/
public class Keyboard implements ComputerPart { @Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
Java--设计模式心得体会的更多相关文章
- 十天来学习java的心得体会
有关学习java是几天来的心得体会: 十天学习java遇到很多问题,每个问题都是经过反复的看书本以及上网查找资料来解决的,发现这一点真的需要自己来而不是去遇到什么问题就去依靠他人(师兄.同学).在其中 ...
- 第一次java小考心得体会
本周四Java第一次上课,测试了一个ATM程序,从两点半开始到五点半结束. 整整三个小时,结果怎么说呢,大概可以用惨不忍睹来形容吧. 因为之前有一个测试样卷,以为考试内容不会变的我,只是把学生信息管理 ...
- Java程序心得体会
学习Java是一件快乐的事情,刚开始学习的时候还有点难,后来慢慢熟悉了Java的程序操作,在错误中获得技巧,一次又一次的失败,让我对Java产生了兴趣,现在对Java既陌生又熟悉,我相信我会喜欢上Ja ...
- java equals 心得体会
要记住最有用的一点: equals 在已经被系统定义好的类中 是已经被重写好了的 父类中的 equals方法是比较的两个对象是否指向同一引用 在被定义除了父类以外比较的是两个对象的内容 因此 人为定义 ...
- Java初学者最近三次作业的心得体会
作为一个初学者,简单的谈一下自己的作业心得体会.如果你是完全没有接触过Java的学习,本篇博文可能会有些收获,如果你已经学习Java有一段时间了,那么可以放弃这篇文章了,因为这篇文章讲解的是基本的东西 ...
- AngularJS心得体会
AngularJS早些时候有过了解,知道这是一个JS的MVC框架,同类型的框架还有Backbone等.这次是由于项目需要,学习了两天的Angular后开始着手改之前的项目代码,这里大概说一下这一周学习 ...
- java设计模式--基础思想总结--父类引用操作对象
看设计模式的相关书籍也有一段时间了,一开始其实是抱着作为java三大框架的基础知识储备来学习的,不过到后来,才发现,在设计模式的一些准则装饰下,java的面向对象威力才真正地体现出来,后面的将会陆续地 ...
- 重学 Java 设计模式:实战工厂方法模式
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!
- 重学 Java 设计模式:实战抽象工厂模式
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!
- 关于Solr的使用总结的心得体会
摘要:在项目中使用Solr作为搜索引擎对大数据量创建索引,提供服务,本文是作者对Solr的使用总结的一点心得体会, 具体包括使用DataImportHandler从数据库中近实时同步数据.测试Solr ...
随机推荐
- Swift 和 C# 的语法比较
昨天看到Jacob Leverich 写了一篇文章 Swift is a lot like Scala 介绍Swift 和 Scala 的语法对比,从这篇文章的确可以看到Swift 的语法和 Scal ...
- angularjs 2.0 快速案例(1)
前言 上一节我们已经把环境给搭建起来了,现在我们通过一个快速案例把angular 2.0 初步了解一下,后续我们会深入每一个细节,这个案例主要是一个[英雄(Hero)]列表的展示,创建,编辑.这个案例 ...
- 2013 duilib入门简明教程 -- 事件处理和消息响应 (17)
界面的显示方面就都讲完啦,下面来介绍下控件的响应. 前面的教程只讲了按钮和Tab的响应,即在Notify函数里处理.其实duilib还提供了另外一种响应的方法,即消息映射DUI_BEG ...
- Struts框架
Struts是最早的Java开源框架之一,它是MVC设计模式的一个优秀实现. Struts定义了通用的Controller(控制器),通过配置文件(通常是 Struts -config.xml) Ec ...
- 专业上的常用的工具和类库集 By 老衣
Visual Studio 2013 扩展 CodeMaid: 可快速整理代码文件,清理不必要的代码和杂乱的格式.并在开发时实时提供代码复杂度的报告,以便帮助开发人员降低代码复杂度.提高代码质量. C ...
- SQL Server DDL触发器运用
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 基础知识(Rudimentary Knowledge) DDL运用场景(DDL Scene) ...
- WPF调用Matlab函数方法
有的时候用C#写图像处理方法,比较费事,不如Matlab简单,但是Matlab又做不出WPF那样的好看界面,怎么办呢. 今天正好我要实现这个功能,就顺便写个小例子,给需要的人做个借鉴. 想要用WPF调 ...
- android应用安全——(数据抓包)跟踪监控android数据包
转载博客:http://blog.csdn.net/xyz_lmn/article/details/8808169 web开发中Chrome.IE.firefox等浏览器都自带提供了插件帮助开发者跟踪 ...
- n维数组实现(可变参数表的使用)
首先先介绍一下可变参数表需要用到的宏: 头文件:#include<cstdarg> void va_start( va_list arg_ptr, prev_param ); type v ...
- 【技巧篇】解决悬浮的<header>、<footer>遮挡内容的处理技巧
引言 在现在的前端页面中,尤其是移动端,经常会需要将<header>或者是<footer>模块悬浮出来,跟随页面的滑动保持定位在页面的最上方或者是最下方,如下图所示. “回 ...