设计模式
ITKaven
ACMER
本科软件工程专业
硕士计算机技术专业
专注于WEB开发的烟酒僧
展开
-
设计模式-状态模式(State Pattern)
状态模式定义当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。类型行为型。UML类图角色环境(Context)角色:环境角色含有状态角色的对象,并且可以处理一些请求,这些请求最终产生的响应会与状态相关。状态(State)角色:状态角色定义了每一个状态的行为接口,这些行为将会在Context中得以使用。具体状态(ConcreteState)角色:实现了相关行为...原创 2020-01-31 22:20:58 · 927 阅读 · 0 评论 -
设计模式-访问者模式(Visitor Pattern)
访问者模式定义将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式,它将对数据的操作与数据结构进行分离。类型行为型。UML类图角色访问者(Visitor)角色 :接口或抽象类,它定义了对每一个元素(Element)访问的接口。具体访问者(ConcreteVisitor)角...原创 2020-01-31 15:59:02 · 1102 阅读 · 0 评论 -
设计模式-责任链模式(Chain of Responsibility Pattern)
责任链模式定义为请求创建一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。类型行为型。UML类图角色抽象处理者(BaseHandler)角色:定义处理请求的接口,并且有接下来要处理请求的处理者的引用。具体处理者(ConcreteHandler)角色:实现抽象处理者角色中处理请求的接口。例子慕课网讲师上线新课程时,慕课网工作人员需要检查资料是否齐全...原创 2020-01-31 14:12:05 · 5666 阅读 · 0 评论 -
设计模式-中介者模式(Mediator Pattern)
中介者模式定义中介者模式又称为调停者模式,用一个中介者来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,减少类之间的依赖,从而使其耦合松散,而且可以独立地改变它们之间的交互。类型行为型。例子慕课网的每门实战课程都有相应的交流群,里面有很多学员,学员可以在里面讨论问题,这个交流群其实就是一个中介者,是所有学员相互交流的一个中介者,我们先不考虑所有学员都能收到交流群更新的消息(可...原创 2020-01-30 23:48:47 · 1111 阅读 · 0 评论 -
设计模式-命令模式(Command Pattern)
命令模式定义将命令封装成对象,从而方便对命令对象进行传递、管理与扩展。并且接收者可以识别这些请求对象,然后执行相应的行为。类型行为型。UML类图角色Receiver:接收者角色,该类是命令的具体执行者,负责具体实施或者执行一个请求,说的通俗一点,就是真正干活的角色。Command:抽象命令角色,定义所有的具体命令类的抽象接口。ConcreteCommand:具体命令角色,该类实...原创 2020-01-30 22:32:41 · 1053 阅读 · 0 评论 -
设计模式-备忘录模式(Memento Pattern)
备忘录模式定义Without violating encapsulation, capture and externalize an object’s internal state so that the object can be restored to this state later.在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到...原创 2020-01-30 15:45:46 · 1129 阅读 · 0 评论 -
设计模式-观察者模式(Observer Pattern)
观察者模式定义观察者模式,又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象。类型行为型。角色抽象主题(Subject)角色:也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者的抽象方法。具体主题(Co...原创 2020-01-30 14:04:35 · 1068 阅读 · 0 评论 -
设计模式-解释器模式(Interpreter Pattern)
解释器模式定义Given a language,define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表...原创 2020-01-29 22:35:24 · 1057 阅读 · 0 评论 -
Java设计模式汇总
设计模式汇总考完研后,感觉不太好,现在做两手准备(准备复试和春招),最近在学习设计模式,是根据慕课网上的课程来学习的;大学前两年在参加ACM竞赛,大三下学期开始准备考研,所以学习开发相关的技术还是自己挤时间出来学的,学的也马马虎虎,很多东西也只是了解,所以难免有写的不对的地方,大家可以指正,万分感谢。设计模式的原则设计模式的七大原则创建型设计模式设计模式-简单工厂模式(Simple...原创 2020-01-29 21:06:12 · 1776 阅读 · 4 评论 -
设计模式-策略模式(Strategy Pattern)
策略模式定义定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换,且算法的变化不会影响使用算法的客户。它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。类型行为型。角色抽象策略(Strategy):定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。具体策略...原创 2020-01-29 17:02:56 · 1282 阅读 · 2 评论 -
设计模式-迭代器模式(Iterator Pattern)
迭代器模式定义提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。类型行为型。角色抽象迭代器(Iterator):抽象迭代器负责定义访问和遍历元素的接口。具体迭代器(ConcreteIterator):提供具体的元素遍历行为。抽象容器(Aggregate):负责定义提供具体迭代器的接口。具体容器(ConcreteAggregate):创建具体...原创 2020-01-29 15:05:57 · 1323 阅读 · 0 评论 -
设计模式-模板模式(Template Pattern)
模板模式定义定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。类型行为型。例子举慕课网的例子,当讲师发布新课程时,慕课网一般要求讲师制作PPT、制作视频、编写手记(可选)、打包课程等,所以我们可以将这一过程模板化,可选的操作使用钩子方法,不可选或者说必须的操作就直接final,即不可重写。ACourse类(课...原创 2020-01-29 13:42:14 · 1452 阅读 · 0 评论 -
设计模式-代理模式(Proxy Pattern)
代理模式定义代理模式又叫委托模式,是为某个对象提供一个代理对象,并且由代理对象控制对原对象的访问。代理模式通俗来讲就是我们生活中常见的中介。类型结构型。例子我们每次在Controller层中实现向数据库insert数据,一般都是经过Service层、Dao层,再到数据库,这里我们将Service层进行代理。为了简单,有些地方并没有像实际开发一样严格。Order类(订单类),实体类。...原创 2020-01-28 20:44:46 · 1437 阅读 · 4 评论 -
设计模式-桥接模式(Bridge Pattern)
桥接模式定义将抽象部分与它的实现部分分离,使它们都可以独立地变化。类型结构型。例子这里举银行的例子,中国有很多种类型的银行,各种银行又有很多种不同的账号类型。多重继承桥接模式从上面的两个图,可以看出桥接模式相较于多重继承的优势,当银行种类很多,账号类型也很多时,桥接模式就更加方便了,大家可以自己好好体会体会。Account接口(账号)。package com.kaven....原创 2020-01-28 14:01:29 · 1624 阅读 · 0 评论 -
设计模式-组合模式(Composite Pattern)
组合模式定义Compose objects into tree structures to represent part-whole hierarchies. Composite let client treat individual objects and compositions of objects uniformly.将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对于...原创 2020-01-28 11:34:04 · 1740 阅读 · 0 评论 -
设计模式-享元模式(Flyweight Pattern)
享元模式定义Use sharing to support large numbers of fine-grained objects efficiently.使用共享对象可有效地支持大量的细粒度的对象。类型结构型。适用场景在对象(相同或相似的对象)足够多的时候,而创建这些对象造成了很大的系统开销时,应该考虑使用享元模式。享元有被频繁使用的场景,才有使用享元模式的价值,因为,在...原创 2020-01-27 15:52:25 · 4101 阅读 · 0 评论 -
设计模式-适配器模式(Adapter Pattern)
适配器模式定义将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作。分类类适配器、对象适配器。角色目标接口:Target,该角色把其他类转换为我们期望的接口。被适配者: Adaptee ,原有的接口,也是希望被适配的接口。适配器: Adapter, 将被适配者和目标接口组合到一起的类。适用场景想要使用一个已经存在的类,但是它却不符合现有的接口规范,导致无法直...原创 2020-01-27 00:13:44 · 4545 阅读 · 0 评论 -
设计模式-装饰者模式(Decorator Pattern)
装饰者模式定义在不改变原有对象的基础上,将功能附加到原有功能上,进行功能的扩展。装饰者模式提供了比继承更有弹性的替代方案。类型结构型。适用场景扩展一个类的功能或者给一个类添加附加职责。在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。需要动态地给一个对象增加功能,这些功能也可以动态地被撤销。优点通过使用不同装饰类以及这些类的排列组合,可以实现不同的效果。...原创 2020-01-26 17:13:22 · 4053 阅读 · 0 评论 -
设计模式-外观模式(Facade Pattern)
外观模式定义又叫门面模式,提供一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易使用,隐藏了子系统的复杂性。类型这种类型的设计模式属于结构型模式。使用场景子系统越来越复杂,增加外观模式可以提供简单调用接口。为一个复杂的模块或子系统提供一个外界访问的接口。子系统相对独立,外界对子系统的访问只要黑箱操作即可。优点简化了调用过程,无须了解、...原创 2020-01-26 12:02:00 · 4269 阅读 · 0 评论 -
设计模式-原型模式(Prototype Pattern)
原型模式定义使用原型实例指定待创建的类型,并且通过复制这个原型实例来创建新的对象。类型创建型。适用场景类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等,通过原型拷贝避免这些消耗。通过new产生的一个对象需要非常繁琐的数据准备或者权限,这时可以使用原型模式。难以根据类生成实例时。一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝...原创 2020-01-24 20:47:44 · 4260 阅读 · 0 评论 -
反射破坏单例模式以及如何防御
反射破坏单例模式以及如何防御需要了解实现单例模式的各种方法,可以参考下方这篇博客。设计模式-单例模式(Singleton Pattern)单例模式类Singleton,是使用静态内部类实现的单例模式。package com.kaven.design.pattern.creational.singleton;public class Singleton{ private Sing...原创 2020-01-23 16:42:57 · 7310 阅读 · 10 评论 -
序列化破坏单例模式以及如何防御的应用与Debug分析
反射、序列化破坏单例模式以及如何防御需要了解实现单例模式的各种方法,可以参考下方这篇博客。设计模式-单例模式(Singleton Pattern)单例模式类Singleton,是使用静态内部类实现的单例模式,并且实现Serializable接口(不实现Serializable接口进行序列化会报错)。package com.kaven.design.pattern.creational.si...原创 2020-01-23 14:59:10 · 4615 阅读 · 0 评论 -
为什么要用枚举实现单例模式(避免反射、序列化问题)
为什么要用枚举实现单例模式(避免反射、序列化问题)1 引言相信如果能看到我这篇博客的小伙伴,肯定都看过Joshua Bloch大神说过的这句话:“单元素的枚举类型已经成为实现Singleton的最佳方法”。其实,第一次读到这句话,我连其中说的单元素指什么都不知道,尴尬。后来,网上搜索了好几篇文章,发现基本上都是转载自相同的一篇文章,而我的困惑是“为什么要用枚举类型实现单例模式呢”,文章中都说的...转载 2020-01-21 11:42:25 · 5812 阅读 · 0 评论 -
设计模式-单例模式(Singleton Pattern)
单例模式定义确保一个类只有一个实例,并为整个系统提供一个全局访问点 (向整个系统提供这个实例)。类型创建型。适用场景网站访问量计数器。项目中用于读取配置文件的类。Spring中,每个Bean默认都是单例的,这样便于Spring容器进行管理。优点由于单例模式只生成了一个实例,所以能够节约系统资源、减少性能开销、提高系统效率。缺点不适合用于变化频繁的对象;如果实例化的对象长...原创 2020-01-21 11:14:26 · 4698 阅读 · 0 评论 -
设计模式-建造者模式(Builder Pattern)
建造者模式定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。类型创建型。适用场景需要生成的产品对象有复杂的内部结构,这些产品对象具备共性。隔离复杂对象的创建和使用,并使得相同的构建过程可以创建不同的产品。建造者模式与抽象工厂...原创 2020-01-18 14:02:15 · 4479 阅读 · 0 评论 -
设计模式-抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式定义抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体的类。现在看不明白没关系,坚持看到最后,并且把例子看懂,再来多体会几遍就能明白了。类型创建型。适用场景应用层不依赖于产品类实例如何被创建、实现等细节。强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量的重复代码。提供一个产品类的库,所有的产品以同样的接口出现,从而使得应用...原创 2020-01-16 22:52:03 · 4533 阅读 · 0 评论 -
设计模式-工厂方法模式(Factory Method Pattern)
工厂方法模式定义工厂方法模式,定义抽象工厂类来负责定义创建对象的公共接口,而具体工厂类则负责生成具体的对象。与简单工厂模式相比,工厂方法模式最重要的区别是引入了抽象工厂角色,抽象工厂可以是接口,也可以是抽象类。类型创建型。优点更加符合开闭原则,当需要增加一种新的产品时,只需要增加相应的具体产品类和相应的具体工厂类即可,而简单工厂模式则需要修改工厂类的if-else判断逻辑,会非常繁琐。...原创 2020-01-16 17:25:58 · 4542 阅读 · 0 评论 -
设计模式-简单工厂模式(Simple Factory Pattern)
简单工厂模式定义设计一个工厂类,给工厂类传入参数决定创建哪一种产品类的实例。简单工厂模式是属于创建型模式,又叫做静态工厂方法模式。类型创建型,但不属于GOF23种设计模式。适用场景应用层只需要知道传入工厂类的参数,对于如何创建对象(逻辑)不需要关心。优点只需要传入一个正确的参数,就可以获取你所需要的对象,而无需知道其创建细节。缺点工厂类的职责相对过重,不易维护,增加新的产品可...原创 2020-01-15 22:05:56 · 4737 阅读 · 0 评论 -
设计模式的七大原则
设计模式的七大原则开闭原则单一职责原则里氏替换原则迪米特法则依赖倒置原则接口隔离原则合成/聚合原则1. 开闭原则(Open-Closed Principle, OCP)定义软件实体应当对扩展开放,对修改关闭。这句话说得有点专业,更通俗一点讲,也就是:软件系统中包含的各种组件,例如模块(Modules)、类(Classes)以及功能(Functions)等等,应该在不修改现有...转载 2020-01-15 17:04:32 · 4601 阅读 · 0 评论