设计模式前端
这篇总结主要是基于我设计模式系列的文章而造成的的。主要是把重要的知识点用本身的话说了一遍,可能会有一些错误,还望见谅和指点。谢谢python
更多详细内容能够到个人cdsn博客上查看: https://blog.csdn.net/a724888程序员
最后,若是想要更好地完成这部份内容的学习,建议你们仍是去看一下原文。面试
建立型模式算法
建立型模式 建立型模式的做用就是建立对象,说到建立一个对象,最熟悉的就是 new 一个对象,而后 set 相关属性。可是,在不少场景下,咱们须要给客户端提供更加友好的建立对象的方式,尤为是那种咱们定义了类,可是须要提供给其余开发者用的时候。数据库
单例编程
单例模式保证全局的单例类只有一个实例,这样的话使用的时候直接获取便可,好比数据库的一个链接,Spring里的bean,均可以是单例的。
后端
单例模式通常有5种写法。
设计模式
第一种是饿汉模式,先把单例进行实例化,获取的时候经过静态方法直接获取便可。缺点是类加载后就完成了类的实例化,浪费部分空间。
微信
第二种是饱汉模式,先把单例置为null,而后经过静态方法获取单例时再进行实例化,可是可能有多线程同时进行实例化,会出现并发问题。
第三种是逐步改进的方法,一开始能够用synchronized关键字进行同步,可是开销太大,然后改为使用volatile修饰单例,而后经过一次检查判断单例是否已初始化,若是未初始化就使用synchronized代码块,再次检查单例防止在这期间被初始化,然后才真正进行初始化。
第四种是使用静态内部类来实现,静态内部类只在被使用的时候才进行初始化,因此在内部类中进行单例的实例化,只有用到的时候才会运行实例化代码。而后外部类再经过静态方法返回静态内部类的单例便可。
第五种是枚举类,枚举类的底层实现其实也是内部类。枚举类确保每一个类对象在全局是惟一的。因此保证它是单例,这个方法是最简单的。
工厂模式
简单工厂通常是用一个工厂建立多个类的实例。
工厂模式通常是指一个工厂服务一个接口,为这个接口的实现类进行实例化
抽象工厂模式是指一个工厂服务于一个产品族,一个产品族可能包含多个接口,接口又会包含多个实现类,经过一个工厂就能够把这些绑定在一块儿,很是方便。
原型模式
通常经过一个实例进行克隆从而得到更多同一原型的实例。使用实例的clone方法便可完成。
建造者模式
建造者模式中有一个概念叫作链式调用,链式调用为一个类的实例化提供便利,通常提供系列的方法进行实例化,实际上就是将set方法改造一下,将本来返回为空的set方法改成返回this实例,从而实现链式调用。
建造者模式在此基础上加入了builder方法,提供给外部进行调用,一样使用链式调用来完成参数注入。
结构型模式
结构型模式
前面建立型模式介绍了建立对象的一些设计模式。
这节介绍的结构型模式旨在经过改变代码结构来达到解耦的目的,使得咱们的代码容易维护和扩展。
桥接模式
有点复杂。建议参考原文
适配器模式
适配器模式用于将两个不一样的类进行适配。
适配器模式和代理模式的异同
比较这两种模式,实际上是比较对象适配器模式和代理模式,在代码结构上,
它们很类似,都须要一个具体的实现类的实例。
可是它们的目的不同,代理模式作的是加强原方法的活;
适配器作的是适配的活,为的是提供“把鸡包装成鸭,而后当作鸭来使用”,
而鸡和鸭它们之间本来没有继承关系。
适配器模式能够分为类适配器,对象适配器等。
类适配器经过继承父类就能够把本身适配成父类了。
而对象适配器则须要把对象传入另外一个对象的构造方法中,以便进行包装。
享元模式
享元模式的核心在于享元工厂类,
享元工厂类的做用在于提供一个用于存储享元对象的享元池,
用户须要对象时,首先从享元池中获取,
若是享元池中不存在,则建立一个新的享元对象返回给用户,
在享元池中保存该新增对象。
代理模式
咱们发现没有,代理模式说白了就是作 “方法包装” 或作 “方法加强”。
在面向切面编程中,算了仍是不要吹捧这个名词了,在 AOP 中,
其实就是动态代理的过程。好比 Spring 中,
咱们本身不定义代理类,可是 Spring 会帮咱们动态来定义代理,
而后把咱们定义在 @Before、@After、@Around 中的代码逻辑动态添加到代理中。
外观模式
外观模式通常封装具体的实现细节,为用户提供一个更加简单的接口。
经过一个方法调用就能够获取须要的内容。
组合模式
组合模式用于表示具备层次结构的数据,使得咱们对单个对象和组合对象的访问具备一致性。
直接看一个例子吧,每一个员工都有姓名、部门、薪水这些属性,
同时还有下属员工集合(虽然可能集合为空),
而下属员工和本身的结构是同样的,
也有姓名、部门这些属性,
同时也有他们的下属员工集合。
class Employee {
private String name;
private String dept;
private int salary;
private List<Employee> subordinates; // 下属
}
装饰者模式
装饰者
装饰者模式把每一个加强类都继承最高级父类。而后须要功能加强时把类实例传入加强类便可,而后加强类在使用时就能够加强原有类的功能了。
和代理模式不一样的是,装饰者模式每一个装饰类都继承父类,而且能够进行多级封装。
行为型模式
行为型模式
行为型模式关注的是各个类之间的相互做用,将职责划分清楚,使得咱们的代码更加地清晰。
策略模式
策略模式通常把一个策略做为一个类,而且在须要指定策略的时候传入实例,因而咱们能够在须要使用算法的地方传入指定算法。
命令模式
命令模式通常分为命令发起者,命令以及命令接受者三个角色。
命令发起者在使用时须要注入命令实例。而后执行命令调用。
命令调用实际上会调用命令接收者的方法进行实际调用。
好比遥控器按钮至关于一条命令,点击按钮时命令运行,自动调用电视机提供的方法便可。
模板方法模式
模板方法通常指提供了一个方法模板,而且其中有部分实现类和部分抽象类,而且规定了执行顺序。
实现类是模板提供好的方法。而抽象类则须要用户自行实现。
模板方法规定了一个模板中方法的执行顺序,很是适合一些开发框架,因而模板方法也普遍运用在开源框架中。
观察者模式和事件监听机制
观察者模式通常用于订阅者和消息发布者之间的数据订阅。
通常分为观察者和主题,观察者订阅主题,把实例注册到主题维护的观察者列表上。
而主题更新数据时自动把数据推给观察者或者通知观察者数据已经更新。
可是因为这样的方式消息推送耦合关系比较紧。而且很难在不打开数据的状况下知道数据类型是什么。
知道后来为了使数据格式更加灵活,使用了事件和事件监听器的模式,事件包装的事件类型和事件数据,从主题和观察者中解耦。
主题当事件发生时,触发该事件的全部监听器,把该事件经过监听器列表发给每一个监听器,监听获得事件之后,首先根据本身支持处理的事件类型中找到对应的事件处理器,再用处理器处理对应事件。
责任链模式
责任链一般须要先创建一个单向链表,而后调用方只须要调用头部节点就能够了,后面会自动流转下去。
好比流程审批就是一个很好的例子,只要终端用户提交申请,根据申请的内容信息,自动创建一条责任链,而后就能够开始流转了。
微信公众号
我的公众号:黄小斜
黄小斜是跨考软件工程的 985 硕士,自学 Java 两年,拿到了 BAT 等近十家大厂 offer,从技术小白成长为阿里工程师。
做者专一于 JAVA 后端技术栈,热衷于分享程序员干货、学习经验、求职心得和程序人生,目前黄小斜的CSDN博客有百万+访问量,知乎粉丝2W+,全网已有10W+读者。
黄小斜是一个斜杠青年,坚持学习和写做,相信终身学习的力量,但愿和更多的程序员交朋友,一块儿进步和成长!
原创电子书: 关注公众号【黄小斜】后回复【原创电子书】便可领取我原创的电子书《菜鸟程序员修炼手册:从技术小白到阿里巴巴Java工程师》
程序员3T技术学习资源: 一些程序员学习技术的资源大礼包,关注公众号后,后台回复关键字 “资料” 便可免费无套路获取。
考研复习资料: 计算机考研大礼包,都是我本身考研复习时用的一些复习资料,包括公共课和专业的复习视频,这里也推荐给你们,关注公众号后,后台回复关键字 “考研” 便可免费获取。
技术公众号:Java技术江湖
若是你们想要实时关注我更新的文章以及分享的干货的话,能够关注个人公众号【Java技术江湖】一位阿里 Java 工程师的技术小站,做者黄小斜,专一 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!
Java工程师必备学习资源: 一些Java工程师经常使用学习资源,关注公众号后,后台回复关键字 “Java” 便可免费无套路获取。
个人公众号
黄小斜是 985 硕士,阿里巴巴Java工程师,在自学编程、技术求职、Java学习等方面有丰富经验和独到看法,但愿帮助到更多想要从事互联网行业的程序员们。
做者专一于 JAVA 后端技术栈,热衷于分享程序员干货、学习经验、求职心得,以及自学编程和Java技术栈的相关干货。
黄小斜是一个斜杠青年,坚持学习和写做,相信终身学习的力量,但愿和更多的程序员交朋友,一块儿进步和成长!
原创电子书:
关注微信公众号【程序员黄小斜】后回复【原创电子书】便可领取我原创的电子书《菜鸟程序员修炼手册:从技术小白到阿里巴巴Java工程师》这份电子书总结了我2年的Java学习之路,包括学习方法、技术总结、求职经验和面试技巧等内容,已经帮助不少的程序员拿到了心仪的offer!
英雄不问出处,编程不看出身。这里是自学编程爱好者的汇集地,也是程序员IT学习资源的藏经阁。点击关注,一块儿成为更优秀的程序员!
程序员3T技术学习资源: 一些程序员学习技术的资源大礼包,关注公众号【程序员江湖】后,后台回复关键字 “资料” 便可免费无套路获取,包括Java、python、C++、大数据、机器学习、前端、移动端等方向的技术资料。
关注公众号【程序员江湖】后回复「Java」、「Python」、「C++」、「大数据」、「算法」、「AI」、「Android」、「前端」、「iOS」、「BAT」、「校招」、「笔试」、「面试」、「计算机基础」、「LeetCode」 等关键字能够获取对应的免费程序员学习资料。