
设计模式
智欣悦
这个作者很懒,什么都没留下…
展开
-
观察者模式之气象监测站实例演示(一)
最近在阅读HEAD+FIRST+设计者模式时,认为其中的事例非常有趣,于是希望在看的过程中,跟随书直接将代码演示,增进理解。同时将一些内容放到自己的博客中,方便日后查阅,或者其他小伙伴们看。观察者模式要点:1、观察者模式定义了对象之间一对多的关系2、主题(也就是可观察者)用一个共同的接口来更新观察者3、观察者和可观察者之间用松耦合方式结合(loosecoupling),可观察者不知...原创 2019-05-13 17:26:12 · 1865 阅读 · 3 评论 -
Java设计模式之简单总结回顾
今天回头看之前的单例设计模式的有关记录,在此简单在总结下:单例模式分为饿汉式和饱汉式(懒汉式),该两个方案在不考虑一些多线程、反射、序列化和反序列化的情况下,饱汉式易于理解和书写,如下:public class LazySingleton { /** * 初级懒汉式单例设计模式 * 线程不安全的,单线程时不会出问题,但是多线程时会出问题 * 假设...原创 2019-08-15 20:29:05 · 112 阅读 · 0 评论 -
java设计模式之——策略模式
一、定义与类型:》定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户。》大范围处理掉if...else...》类型:行为型二、适用场景:》系统有很多类,而它们的区别仅仅在于他们的行为不同;》一个系统需要动态地在几种算法中选择一种;三、策略模式优点:》开闭原则;》避免使用多重条件转移语句;》提高算法的保密性和安全性...原创 2019-08-25 14:18:33 · 187 阅读 · 0 评论 -
java设计模式之解释器模式
一、定义与类型:》定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。》为了解释一种语言,二位语言创建的解释器。》类型:行为型二、适用场景:》某个特定类型问题发生频率足够高;一般使用开源包。三、解释器模式优点:》语法由很多类表示,容易改变及扩展此“语言”;四、缺点:》当语法规则数目太多时,增加了系统复杂度,现...原创 2019-08-25 14:24:55 · 203 阅读 · 0 评论 -
java设计模式之桥接模式
一、桥接模式定义与类型:》定义:将抽象部分与它的具体实现部分分离,使他们都可以独立地变化》通过组合的方式建立两个类之间的关系,而不是继承》类型:结构型二、适用场景》抽象和具体实现之间增加更多的灵活性》一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展》不希望使用继承,或因为多层继承导致系统类的个数剧增。三、桥接优点:》分离抽象部...原创 2019-08-17 17:37:45 · 313 阅读 · 1 评论 -
java设计模式之——代理模式
一、定义与类型:》定义:为其他对象提供一种代理,以控制对这个对象的访问;》代理对象在客户端和目标对象之间起到中介的作用;例如:我们通过房产中介租房。》类型;结构型二、适用场景:》保护目标对象。比如不知道真实房东是谁》增强目标对象。控制客户端对目标对象的访问租房前草拟合同就相当于对目标对象进行增强,相当于spring AOP中的before租房子相当于目标对象而租...原创 2019-08-18 14:11:29 · 156 阅读 · 0 评论 -
java设计模式之观察者模式
一、定义与类型:》定义:定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的所有依赖者(观察者)都会收到通知并更新;微信朋友圈点赞之后,你就是观察者,微信的那条朋友圈就是被观察者;京东上,关注某个商品,当商品降价时,会收到通知。网络视频课,有人提出了一个问题,该课程的老师会收到相应通知等等。》类型:行为型二、适用场景:》关联行为场景...原创 2019-08-31 16:47:26 · 178 阅读 · 0 评论 -
java设计模式之备忘录模式
一、定义与类型:》定义:保存一个对象 的某个状态,以便在适当的时候恢复对象》后悔药》类型:行为型;二、适用场景:》保存及恢复数据相关业务场景;比如一个软件的保存撤退功能,主要用于工作流中。》后悔的时候,即想恢复到之前的状态;三、优点:》为用户提供一种可恢复机制;》存档消息的封装;四、缺点:》资源占用;五、相关设计模式:》备忘录模式和状态模式:备忘...原创 2019-08-31 17:59:35 · 189 阅读 · 0 评论 -
java设计模式之命令模式
一、定义与类型:》定义:将“请求”封装成对象,以便使用不同的请求把不同点请求封装成不同的请求对象,接收者都可以识别,执行不同的行为。比如老板给员工下不同的命令,员工都能接收并执行。》命令模式解决了应用程序中对象的职责以及它们之间的通信方式;老板只负责下命令,不关心如何实现。员工只需要知道执行什么工作就好。二、适用场景:》请求调用者和请求接收者需要解耦,使得调用者和接收者不直接交...原创 2019-08-31 23:34:32 · 197 阅读 · 0 评论 -
java设计模式之中介者模式
一、定义与类型:》定义一个封装一组对象如何交互的对象》通过使对象明确地相互引用来促进松散耦合,并允许独立地改变它们的交互;》类型:行为型二、适用场景:》系统中对象之间存在复杂的引用关系,产生的相互依赖关系结构混乱难以理解;》交互的公共行为,如果需要改变行为则可以增加新的中介者类。通常用于聊天室等三、优点:》将一对多转化成了一对一、降低程序复杂度》类之间解耦...原创 2019-09-01 00:08:16 · 217 阅读 · 0 评论 -
java 设计模式之责任链模式
一、定义与类型:》为请求创建一个接收此次请求对象的链。这个链条中,每个元素是一个对象。》类型:行为型;二、适用场景:》一个请求的处理需要多个对象当中的一个或几个协作处理。三、优点:》请求的发送者和接收者(请求的处理)解耦。》责任链可以动态组合。如果复杂一点,把责任链的顺序和是否需要这个责任链做成外部的配置,则责任链可以动态组合四、缺点:》责任链太长或者处理时间过...原创 2019-09-01 13:22:33 · 191 阅读 · 0 评论 -
java设计模式之访问者模式
一、定义与类型:》定义:封装作用于某数据结构(如List/Set/Map等)中的各元素的操作》可以在不改变各元素的类的前提下,定义作用于这些元素的操作。》使用概率较低》类型:行为型二、适用场景:》一个数据结构如(List/Set/Map等)包含很多类型对象;》数据结构与数据操作分离。数据是数据,对数据的操作是对数据的操作这种分离的场合时,比如数据加载和对数据的操作分...原创 2019-09-01 13:32:31 · 183 阅读 · 0 评论 -
java设计模式之状态模式
一、定义与类型:》定义:允许一个对象在其内部状态改变时,改变它的行为。也就是说一个对象的状态改变时,其行为会改变。或者说它的行为不跟者改变,而是状态之间的转化。用于解决当控制一个对象的状态转换的逻辑比较复杂时,这样就可以把状态判断的逻辑转移到表示不同状态的一系列类当中。比如在看视频时,可以开始、暂停、播放等多种形式。》类型:行为型;二、适用场景:》一个对象存在多个状态(不同状态...原创 2019-09-01 19:17:16 · 332 阅读 · 0 评论 -
java设计模式之——组合模式
一、定义与类型》定义:将对象组合成树形结构以表示“部分-整体”的层次结构》组合模式使客户端对单个对象和组合对象保持一致的方式处理》类型:结构型》二、组合——适用场景》希望客户端可以忽略组合对象与单个对象的差异时》处理一个树形结构时三、组合模式优点:》清楚地定义分层次的复杂对象,表示对象的全部或部分层次》让客户端忽略了层次的差异,方便对整个层次结构进行控制...原创 2019-08-11 23:47:24 · 222 阅读 · 0 评论 -
java设计模式——之享元模式
一、享元模式的定义与类型:》定义:提供了减少对象数量从而改善应用所需的对象结构的方式》运用共享,有效地支持大量细粒度的对象》类型:结构型》俗话解:减少对象的创建数量,降低内存消耗,节省运行时间等二、享元模式适用场景》常常应用于系统底层的开发,以便解决系统的性能问题。比如java中的string类型,就使用了享元模式。数据库的连接池也类似。如果需要获取对象,先确认是否有可...原创 2019-08-11 11:42:59 · 334 阅读 · 0 评论 -
java设计模式之迭代器模式
一、迭代器地定义与类型:》定义:提供一种方法,顺序访问一个集合对象中的各个元素,而又不暴露该对象的内部表示》比如一个箱子中有n台电脑,只是遍历其类型,并不暴露其他信息》类型:行为型二、适用场景:》访问一个集合对象的内容而无需暴露它的内部表示》为遍历不同的集合结构提供一个统一的接口三、优点:》分离了集合对象的遍历行为四、缺点:》类的个数成对增加五、迭代器模...原创 2019-08-18 23:25:22 · 158 阅读 · 0 评论 -
java设计的六大原则
一、开闭原则 其他原则的基础定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭; 用抽象创建框架,用实现扩展细节;优点:提高软件系统的可复用性和可维护性。特点:面向对象开发中最基础的原则。核心思想:面向抽象进行编程,而不是面向具体对象进行编程。...原创 2019-06-01 13:01:45 · 127 阅读 · 0 评论 -
单例设计模式详解——定义、适用场景和基本应用
一、定义与类型定义:保证一个类仅有一个实例,并提供一个全局访问点类型:创建型二、单例适用场景》想确保任何情况下都绝对只有一个实例单服务情况下网站的计数器使用单例集群的情况下共享的计数器应用的配置使用单例 线程池的设计数据库的连接池也使用单例三、单例的优点》在内存里只有一实例,减少了内存开销。一个对象需要频繁创建和销毁,无法优化》可以避免对资源的多重占用...原创 2019-06-16 18:08:54 · 561 阅读 · 0 评论 -
java设计模式之单例模式——懒汉式(饱汉式)及多线程debug
1、懒汉式定义:懒汉式设计模式:比较懒,在类创建时不创建对象,而是以延迟加载的方式,当需要使用时才创建。2、懒汉式的优缺点:3、懒汉式的基础创建方式:package com.zxl.design.zxl.design.pattern.singleton;/** * Created by Administrator on 2019/6/16. * 懒汉式是指初始化时是不创建...原创 2019-06-23 10:13:47 · 1345 阅读 · 0 评论 -
java设计模式之单例模式简单写法——饿汉式写法
一、饿汉式:非常饿,类一加载就要初始化(先new 一个对象出来吃)二、特点:因为类一加载就初始化完成,所以 避免了多线程的问题,并且写法简单,但是也可能造成资源浪费(如果类对象比较消耗资源),比如没用的时候也会初始化。三、代码package com.zxl.design.zxl.design.pattern.singleton;/** * Created by Admini...原创 2019-06-23 20:39:02 · 494 阅读 · 0 评论 -
java设计模式之单例设计模式——序列化破坏单例模式原理解析及解决方案
一、序列化破坏单例模式问题之初:单例设计模式经过序列化和反序列化之后创建的对象是同一个对象吗?二、实例应用分析是否存在问题。实例设计原理:创建一个单例设计类对象,将该类序列化到一个文件中,然后再读取文件,创建出一个对象,判断两个对象是否为同一个。以饿汉式单例设计模式类对象为例。package com.zxl.design.zxl.design.pattern.singleto...原创 2019-06-23 23:03:44 · 351 阅读 · 0 评论 -
java设计模式之单例设计模式——-反射攻击解决方案及原理分析
一、仍然以实例引入,发现问题、解决问题的思路进行。1)问题:鉴于反射可以任意创建对象的特点,猜测,是否存在通过反射在外部通过调用私有构造方法创建对象,打破单例模式特点的可能?2)仍然以饿汉模式的例子进行示例(当然也可通过其他方式)。代码如下,先运行,看不破坏的情况下是什么样package com.zxl.design.zxl.design.pattern.singleton;...原创 2019-06-24 00:02:02 · 982 阅读 · 0 评论 -
单例设计模式之枚举类型实现单例设计模式的原理源码和反射攻击防御
一、枚举类方式创建单例模式举例package com.zxl.design.zxl.design.pattern.singleton;import java.io.ObjectInputStream;/** * Created by Administrator on 2019/6/30. */public enum EnumInstance { INSTANCE; ...翻译 2019-06-30 15:54:51 · 617 阅读 · 0 评论 -
单例设计模式之容器单例
一、容器单例,就是指管理单例对象的容器。二、代码呈上package com.zxl.design.zxl.design.pattern.singleton;import com.sun.deploy.util.StringUtils;import java.util.HashMap;import java.util.Map;/** * Created by Adminis...翻译 2019-06-30 19:38:03 · 1763 阅读 · 0 评论 -
java设计模式之外观模式
一、外观模式基本介绍:》定义:又叫门面模式,提供了一个统一的接口,用来访问子系统中的一群接口》外观模式定义了一个高层接口,让系统更容易使用》类型:结构型》外观适用场景:1)子系统越来越复杂,增加外观模式提供简单调用接口;2)构建多层系统结构,利用外观对象作为每层的入口,简化层间调用;》优点: 1)简化了调用过程,无需了解深入子系统,防止带来风险;2)减少系...原创 2019-07-07 14:20:13 · 213 阅读 · 0 评论 -
java设计模式之装饰者模式
一、定义与类型:》定义:在不改变原有对象的基础之上,将功能附加到已有对象上》提供了比继承更有弹性的替代方案(扩展原有对象功能)》类型:结构型二、装饰者——使用场景生活场景,比如买礼品时,需要礼品和层层包装,包装可以自行选取后的总花销;买早饭,是肉夹馍还是一个肉夹馍再额外加蛋还是火腿时的售价计算;买蛋糕时,不同层次选择的配料不同,如何计算其价格等程序场景:扩展一个类的功能或给...原创 2019-07-20 14:56:27 · 416 阅读 · 0 评论 -
java设计模式之适配器模式
一、定义与类型:》定义:将一个类的接口转换成客户期望的另一个接口 将一个类的接口,就是被适配者,另一个接口就是目标类型》使原本接口不兼容的类可以一起工作。比如手机或者电脑等一些电器的充电转换头。》类型:结构型 二、适用场景:》已经存在的类,它的方法和需求不匹配时(方法结果相同或相似)(为了复用现有的一些类或者数据、行为都正确,但是接口不符合)》不是软件设...原创 2019-07-20 20:16:46 · 605 阅读 · 0 评论 -
java设计模式之模板方法
一、模板方法定义定义与类型:》定义:定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现》模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤》类型:行为型二、适用场景:》一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。比如把大象装进冰箱这个场景 ,开冰箱门、放入大象、关冰箱门。对于如上三个步骤,一定是要有的,而对于具体如何开门?如何放...原创 2019-08-18 19:25:26 · 178 阅读 · 0 评论 -
java设计模式总结
UML基础、类图、时序图、类关系、记忆技巧七大设计原则:开闭原则依赖倒置原则单一职责原则接口隔离原则迪米特原则里氏替换原则合成复用原则设计模式之创建型:工厂方法模式(常见)抽象工厂模式(常见)建造者模式(常见)单例模式(常见)原型模式结构型:适配器模式(常见)装饰者模式(常见)代理模式(常见)外观模式(常见)组合模...原创 2019-09-01 19:24:05 · 155 阅读 · 0 评论