Java设计模式
文章平均质量分 78
键盘林
将代码融入于生活。享受生活,享受程序。一段程序,一场人生。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式以及在业务场景的实践
目录前言设计模式的类型设计模式的六大原则设计模式的特点业务中落地房源上房处理链业务-责任链模式自动追价优惠活动策略处理器业务-策略模式日志工厂对象处理业务-单例模式多种场景打印封装日志业务-抽象工厂模式结语参考文献前言在软件领域中,最先诞生的是软件模式,软件模式(Software Patterns)是将模式的一般概念应用于软件开发领域,即软件开发的总体指导思路或参照样板。软件模式并非仅限于设计模式,还包括架构模式、分析模式和过程模式等,实际上,在软件开发生原创 2021-02-28 10:46:58 · 1417 阅读 · 0 评论 -
设计模式深入浅出--1.UML类图和时序图
UML类图讲解+:public-:private#:protect~:包权限斜体代表抽象方法这里面一定要注意由于study()方法是抽象方法,那么该类一定是抽象类,所以类名GeelyClass必须也是斜体。实例详解:...原创 2019-06-22 18:26:34 · 424 阅读 · 0 评论 -
设计模式深入浅出--2.七大设计原则(上)
设计原则:开闭原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特法则(最少知道原则)、里氏替换原则、合成/复用原则(组合/复用原则)开闭原则开闭原则coding:创建接口创建实现类主函数调用查看IDEA中UML结构图如果我们要添加一个打折功能的话在实现类中具体实现该方法但是这种方式还是存在很大的弊端,没有实现完美的解耦,这时候,...原创 2019-06-22 18:46:07 · 222 阅读 · 1 评论 -
设计模式深入浅出--2.七大设计原则(中)
coding:创建一个类bird创建main方法当我们添加“鸵鸟”这个参数进入到方法中的时候,我们发现这样就非常不符合逻辑我们在这里面加一个if判断运行之后,就发现扩展带来的很多问题。再一次修改虽然这种方法解决了当前的问题,但是迎面而来的是多个类都进行判断的话,怕是写不完啊这个时候,我们在类的程度上进行重构创建一个Walk...原创 2019-06-23 14:19:13 · 200 阅读 · 0 评论 -
设计模式深入浅出--2.七大设计原则(下)
coding创建一个接口创建一个Dog类来实现它创建一个Bird也实现IAnimalAction接口当前UML类图我们发现Bird和Dog两个类都实现了一些不属于它们的方法,这种方式造成了数据冗余因此我们得采用接口隔离原则创建一个接口IFlyAnimalAction创建一个接口IEatAnimalAction创建一个接口ISw...原创 2019-06-23 14:53:47 · 218 阅读 · 1 评论 -
设计模式深入浅出--3.简单工厂模式和工厂方法及它们各自在jdk源码中的体现
简单工厂:定义:由一个工厂对象绝对创建出哪一种产品类的实例类型:创建型,但不属于 GOF23种设计模式适用场景:工厂类负责创建的对象比较少客户端(应用层)只知道传入工厂类的参数对于如何创建对象(逻辑)不关心优点:只需要传入一个正确的参数,就可以获取你所需要的对象而无须知道其创建细节缺点:工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,违背开闭原则...原创 2019-05-24 09:00:16 · 602 阅读 · 1 评论 -
设计模式深入浅出--4.抽象工厂coding以及JDK中的使用
抽象工厂定义:抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口无须指定它们具体的类类型:创建型适用环境:客户端(应用层)不依赖于产品类实例如何被创建、实现等细节强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量重复的代码提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现优点:具体产品在应用层代码隔离,无须关心创建细...原创 2019-05-24 12:26:56 · 313 阅读 · 1 评论 -
设计模式深入浅出--5.建造者模式coding以及JDK中的使用
建造者:定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,用户只需指定需要建造的类型就可以得到它们,建造过程及细节不需要知道类型:创建型适合场景如果一个对象有非常复杂的内部结构(很多属性)想把复杂对象的创建和使用分离优点封装性好,创建和使用分离扩展性好、建造类之间独立、一定程度上解耦缺点产生多余的Builder对象产品内部...原创 2019-05-24 12:54:27 · 281 阅读 · 2 评论 -
设计模式深入浅出--6.原型模式coding以及JDK中的使用以及如何破坏单例模式
原型模式定义:指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,不需要知道创建细节,不调用构造函数类型:创建型适合场景:类初始化消耗较多资源new产生的一个对象需要非常繁琐的过程(数据准备、访问权限等)构造函数比较复杂循环体中产生大量对象时优点:原型模式性能比直接new一个对象性能高简化创建过程缺点:必须配备克隆方法对克隆复杂对象或...原创 2019-05-24 16:50:35 · 205 阅读 · 0 评论 -
设计模式深入浅出--7.单例模式懒汉式(多线程下的问题)和饿汉式(一)
单例模式定义:保证一个类仅有一个实例,并提供一个全局访问点。类型:创建型适合场景:想确保任何情况下都绝对只有一个实例优点:在内存中只有一个实例,减少了内存开销可以避免对资源的多重占用设置全局访问点,严格控制访问缺点:没有接口,扩展困难重点:私有构造器线程安全延迟加载序列化和反序列化安全反射coding:懒汉式单例模式创...原创 2019-05-24 19:37:31 · 340 阅读 · 2 评论 -
设计模式深入浅出--7.序列号破坏单例模式解决方法以及readResolve方法的底层实现(二)
通过序列号来破坏单例模式饿汉式为例实现序列号接口我们可以看到我们通过序列化的方式创建出来了两个不同的对象,导致破坏了原本的单例模式解决办法,在HungrySingleton类中创建一个方法在运行一下我们可以知道这个方法肯定是重载方法我们可以进入到ObjectInputStream这个类来查看当类被序列号和反序列化时候返...原创 2019-06-25 21:12:50 · 336 阅读 · 0 评论 -
设计模式深入浅出--7.单例模式反射攻击的解决方案(三)
通过反射来破坏单例模式一定要记得将setAccessible()设置为true在私有构造方法中增加一层判断再一次运行:由于反射创建对象,是通过构造函数来进行创建的,所以我们在私有构造方法中,增加一层判断就可以了。对于延迟加载的懒汉式运行之后,和我们预期是一样的但是如何调换加载顺序呢?让反射先执行,然后延迟创建对象后执行的话,结果就是两个不...原创 2019-06-26 01:09:46 · 182 阅读 · 0 评论 -
设计模式深入浅出--7.枚举单例模式及底层源码解析(四)
枚举实现单例模式coding:创建一个枚举的EnumInstance类修改Test运行结果,枚举类可以在序列号的情况下实现单例模式现在我们判断一下它的属性是不是在序列化的情况下是不是还是同一个运行结果那我们现在来分析一下它底层是怎么实现的进入到ObjectInputStream类中 的readEnum()方法既然系列化不受影响,那反...原创 2019-06-26 15:16:01 · 225 阅读 · 0 评论 -
设计模式深入浅出--7.容器单例模式和ThreadLocal线程单例及单例在jdk和开源框架的应用(五)
容器单例模式相当于一个容器工具,对外来说只能是一个对象。我们通过map来实现一个单例的容器coding:私有构造方法StringUtils.isNotBlank(key):判断string key是不是为空从map容器中获取key线程run方法:在Test这里面会有一个隐患,那就是当两个线程同时进入到map的put中的时候,会出现两个obj...原创 2019-06-26 15:57:38 · 873 阅读 · 0 评论 -
设计模式深入浅出--8.外观模式详细讲解
外观模式:又叫门面模式,提供了一个统一的接口,用来访问子系统中的一群接口外观模式定义了一个高层接口,让子系统更容易使用类型:结构型适用场景:子系统越来越复杂,增加外观模式提供简单调用接口构建多层系统结构,利用外观对象作为每层的入口,简化层间调用优点:简化了调用过程,无需了解深入子系统,防止带来风险。减少系统依赖、松散耦合更好的划分访问层次符合迪米特法则,...原创 2019-06-26 20:43:55 · 217 阅读 · 0 评论 -
设计模式深入浅出--9.装饰者模式及其在JDK中的应用
装饰者模式定义:在不改变原有对象的基础之上,将功能附加到对象上提供了比继承更有弹性的替代方案(扩展原有对象功能)类型:结构型适用场景:扩展一个类的功能或给一个类添加附加职责动态的给一个对象添加功能,这些功能可以再动态的撤销优点:继承的有力补充,比继承灵活,不改变原有对象的情况下给一个对象扩展功能通过使用不同装饰类以及这些装饰类的排列组合,可以实现不同效果符...原创 2019-06-27 08:59:13 · 682 阅读 · 0 评论 -
设计模式深入浅出--10.适配器模式及其在JDK中的应用
适配器:定义:将一个类的接口转换成客户期望的另一个接口是原本接口不兼容的类可以一起工作类型:结构型适用场景:不是软件设计阶段考虑的设计模式,随着软件维护由于不同产品、不同厂家造成功能类似而接口不同情况下的解决方案已经存在的类,它的方法和需求不匹配时(方法结果相同或相似)优点:能提高类的透明性和复用,现有的类复用但不需要改变目标类和适配器类解耦,提高程序扩展性...原创 2019-06-27 20:41:08 · 472 阅读 · 0 评论 -
设计模式深入浅出--11.享元模式及其在JDK中的应用
享元模式:定义:提供了减少对象数量从而改善应用所需的对象结构的方式运用共享技术有效地支持大量细粒度的对象类型:结构型适用场景:常常应用于系统底层的开发,以便解决系统的性能问题。系统有大量相似对象、需要缓冲池的场景。优点:减少对象的创建,降低内存中对象的数量,降低系统的内存,提高效率减少内存之外的其他资源占用缺点:关注内/外部状态、关注线程安全问题...原创 2019-06-27 22:38:33 · 537 阅读 · 0 评论 -
设计模式深入浅出--12.组合模式及其在JDK中的应用和mybatis中的应用
组合模式定义:将对象组合成树型结构以表示“部分-整体”的层次结构组合模式使客户端对单个对象和组合对象保持一致的方式处理类型:结构型适用场景:希望客户端可以忽略组合对象与单个对象的差异时处理一个树型结构时优点清楚地定义分层次的复杂对象,表示对象的全部或部分层次让客户端忽略了层次的差异,方便对整个层次结构进行控制简化客户端代码符合开闭原则缺点...原创 2019-06-28 09:26:39 · 548 阅读 · 0 评论 -
设计模式深入浅出--13.桥接模式及其在JDK中的应用
桥接模式定义:将抽象部分与他的具体实现部分分离,使它们都可以独立地变化通过组合的方式建立两个类之间联系,而不是继承类型:结构型适用场景:抽象和具体实现之间增加更多的灵活性一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展不希望使用继承,或因为多层继承导致系统类的个数剧增优点:分离抽象部分及其具体实现部分提高了系统的可扩展性...原创 2019-06-28 15:26:58 · 894 阅读 · 0 评论 -
设计模式深入浅出--14.动态、静态、CGlib代理模式及底层分库分表及spring、mybatis中的应用
代理模式定义:为其他对象提供一种代理,以控制对这个对象的访问代理对象在客户端和目标对象之间起到中介的作用适用场景:保护目标对象增强目标对象优点:代理模式能将代理对象与真实被调用的目标对象分离一定程度上降低了系统的耦合度保护目标对象增强目标对象缺点:代理模式会造成系统设计中类的数目增加在客户端和目标对象增加一个代理对象,会造成请求处理速度变慢...原创 2019-06-28 20:54:33 · 229 阅读 · 0 评论 -
设计模式深入浅出--15.模板方法模式及钩子方法及在JDK中的应用
模板方法模式定义:定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤类型:行为型适用场景:一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。各子类中公共的行为被提取出来并集中到一个公共父类中,从而避免代码重复。优点:提高复用性提高扩展性符合开闭原则缺点:类数目增...原创 2019-06-28 21:58:39 · 602 阅读 · 1 评论 -
设计模式深入浅出--16.迭代器模式的实例及其在JDK、Mybatis中的应用
迭代器模式定义:提供一种方法,顺序访问一个集合对象中的各个元素,而又不暴露该对象的内容表示类型:行为型适用场景:访问一个集合对象的内容而无需暴露它的内部表示为遍历不同的集合结果提供一个统一的接口优点:分离了集合对象的遍历行为缺点:类的个数成对增加相关设计模式:迭代器模式和访问者模式coding:创建Course类创建CourseAggre...原创 2019-06-29 09:01:08 · 336 阅读 · 0 评论 -
设计模式深入浅出--17.策略模式及策略模式与工厂模式的结合使用及其在JDK、Spring中的应用
策略模式定义:定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户if...else...类型:行为型系统有很多类,而他们的区别仅仅在于他们的行为不同一个系统需要动态地在几种算法中选择一种优点:开闭原则避免使用多重条件转移语句提高算法的保密性和安全性缺点:客户端必须知道所有的策略类,并自行决定使用哪一个策略...原创 2019-06-29 11:14:08 · 632 阅读 · 0 评论 -
设计模式深入浅出--18.解释器模式简单实例及其在JDK、Spring中的应用
解释器模式定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的语句。为了解释一种语言,而为语言创建的解释器类型:行为型适用场景:某个特定类型问题发生频率足够高优点:语法由很多类表示,容易改变及扩展此“语言”缺点:当语法规则数目太多时,增加了系统复杂度相关设计模式解释器模式和适配器模式coding:...原创 2019-06-29 14:23:59 · 860 阅读 · 0 评论 -
设计模式深入浅出--19.观察者模式简单实例中Observer和Observable及其在JDK中的应用
观察者模式定义:定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发送变化时,它的所有依赖者(观察者)都会收到通知并更新类型:行为型适用场景:关联行为场景,建立一套触发机制优点:观察者和被观察者之间建立一个抽象的耦合观察者模式支持广播通信缺点:观察者之间有过多的细节依赖。太高时间消耗及程序复杂度使用要得当,要避免循环调用Cod...原创 2019-06-29 18:03:11 · 630 阅读 · 0 评论 -
设计模式深入浅出--20.备忘录模式简单实例及模拟“Allt+Z”操作回退及其在Spring中的应用
备忘录模式定义:保存一个对象的某个状态,以便在适当的时候恢复对象类型:行为型适用场景:保存及恢复数据相关业务场景后悔的时候,即想恢复到之前的状态优点:为用户提供一种可恢复机制存档信息的封装缺点:资源占用相关设计模式:备忘录模式和状态模式Coding:业务场景:在网站上发布手记,然后模拟“Allt+Z”操作回退创建Article类...原创 2019-06-29 21:31:26 · 398 阅读 · 0 评论 -
设计模式深入浅出--21.命令模式简单实例及其在JDK中的应用
命令模式:定义:将“请求”封装成对象,以便使用不同的请求命令模式解决了应用程序中对象的职责以及它们之间的通信方式类型:行为型适用场景:请求调用者和请求接收者需要解耦,使得调用者和接收者不直接交互需要抽象出等待执行的行为优点:降低解耦容易扩展新命令或者一组命令缺点:命令的无限扩展会增加类的数量,提高系统实现复杂度相关设计模式:命令模式和备忘录模...原创 2019-06-30 14:42:44 · 596 阅读 · 0 评论 -
设计模式深入浅出--22.中介者模式简单实例及其在JDK中的应用
中介者模式定义:一个封装一组对象如何交互的对象通过使对象确定地相互引用促进松散耦合,并允许独立地改变它们的交互类型:行为型适用场景:系统中对象之间存在复杂的引用关系,产生的相互依赖关系结构混乱且难以理解交互的公共行为,如果需要改变行为则可以增加新的中介者类优点:将一对多转化成了一对一、降低了程序复杂度类之间解耦缺点:中介者过多,导致系统复杂相关设...原创 2019-06-30 15:30:43 · 512 阅读 · 0 评论 -
设计模式深入浅出--23.责任链模式简单实例及其在filter中的应用及设计模式学习过程的忠告
提醒:当前所讲的所有的设计模式都是基本的一种设计思维,到了真正所使用的时候其设计代码肯定和我们之前设计的完全不同所以请读者不要形成硬式思维!责任链模式:定义:为请求创建一个接收此次请求对象的链类型:行为型适用场景:一个请求的处理需要多个对象当中的一个或几个协作处理优点:请求的发送者和接收者(请求的处理)解耦责任链可以动态组合缺点:责任链太长或者处理时间太长...原创 2019-06-30 16:48:23 · 165 阅读 · 0 评论 -
设计模式深入浅出--24.访问者模式简单实例及其在JDK、Spring中的应用
访问者模式定义:封装作用于某数据结构(如List/Set/Map等)中的各元素的操作可以在不改变各元素的类的前提下,定义作用于这些元素的操作类型:行为型适用场景:一个数据结构如(List.Set/Map等)包含很多类型对象数据结构与数据操作分离优点:增加新的操作很容易,即增加一个新的访问者缺点:增加新的数据结构困难具体元素变更比较麻烦相关设计模式...原创 2019-06-30 17:50:21 · 1572 阅读 · 1 评论 -
设计模式深入浅出--25.状态简单实例及其在jsf中的应用
状态模式定义:允许一个对象在其内部状态改变时,改变它的行为类型:行为型适用场景:一个对象存在多个状态(不同状态下行为不同),且状态可相互转换优点:将不同的状态隔离把各种状态的转换逻辑,分布到State的子类中,减少相互间依赖增加新的状态非常简单缺点:状态多的业务场景导致类数目增加,系统边复杂相关设计模式:状态模式和享元模式Coding:创建C...原创 2019-06-30 18:22:53 · 293 阅读 · 0 评论 -
spring中的设计模式
原文:https://blog.csdn.net/Dwade_mia/article/details/78883045工厂模式通过AbstractAutowireCapableBeanFactory继承抽象工厂AbstractBeanFactory实现的功能:创建(实例化和初始化bean),装配(包括自动装配)、销毁。单例模式spring创建的bean默认为singleton...转载 2019-09-26 08:50:29 · 592 阅读 · 0 评论
分享