
初识设计模式
文章平均质量分 66
随着开发的深入,设计模式是我们提升自我能力与代码质量的不二选择。本专栏将带大家初识设计模式。
小鲍侃java
CSDN博客专家,华为签约作者,全网粉丝10w,阅读量100w+。现任企业架构师,主要分享和讲解毕设,java入门与晋级架构师的技巧与知识。
展开
-
访问者模式
定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。优点:1.扩展性好。方便添加新的访问者。 2. 复用性好。可以通过访问者来定义整个对象结构通用的功能,从而提高系统的复用程度。 ...原创 2019-12-25 23:33:17 · 546 阅读 · 1 评论 -
中介者模式
定义:用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。。优点:1.灵活性高,因为将同事类进行了解耦,使其不必有关联性;2.降低了类的复杂度,将一对多转化成了一对一;缺点:1.中介者使用过多,中介者类太过负责,会使系统变得复杂难...原创 2019-12-25 23:33:11 · 519 阅读 · 2 评论 -
设计模式开篇
最近对设计模式特别感兴趣,感觉能再代码中灵活使用设计模式是一种特别有逼格的事情,而设计模式的学习真的是学了忘,忘了学,加上老年人的记忆减退,对核心理解的不到位,使学习进度特别的缓慢,由此,对以往的学习个人理解都记录在一起。同时分享两篇总纲性质的博客http://www.jizhuomi.com/software/757.htmlhttp://www.cnblogs.com/zuoxi...原创 2019-10-25 17:10:55 · 462 阅读 · 1 评论 -
命令模式
定义:请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令,对请 求排队或者记录请求日志,可以提供命令的撤销和恢复功能优点:1.调用者角色与接收者角色之间没有任何依赖关系,松耦合。2.Command可像其他的对象一样被操纵和扩展,可以增加和修改。可以装配成组合命令 3从而...原创 2019-12-25 23:33:01 · 486 阅读 · 2 评论 -
备忘录模式
定义:在不破坏对象封装的前提下,捕获一个的对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。优点:1.可以使用能够比较方便地回到某个历史的状态 2.实现了信息的封装,使得用户不需要关心状态的保存细节缺点:1.消耗资源使用场景:ctrl+z键、浏览器回退。原理:通过一个备忘录类专门存储对象状态(简单来说 就是把原来数据封装成...原创 2019-10-24 14:40:11 · 527 阅读 · 1 评论 -
观察者模式
定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。优点:1.观察者和被观察者是抽象耦合的缺点:1.目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环引用。 2.当观察者对象很多时,通知的发布会花费很多时间,影响程序的效率。使用场景:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合...原创 2019-11-25 10:16:38 · 518 阅读 · 1 评论 -
职责链模式
定义:为了避免请求的发送者和接收者之间的耦合关系,使多个接受对象都有机会处理请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。优点:1.客户端与具体的处理者解耦,客户端只认识一个Hanlder接口,降低了客户端(即请求发送者)与处理者的耦合度。 2.简化了对象。使得对象不需要知道链的结构。缺点:1.提高了系统的复杂度。 ...原创 2019-11-25 10:16:20 · 447 阅读 · 1 评论 -
模板方法模式
定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。优点:1.封装不变部分,扩展可变部分 2.提取公共部分代码,便于维护缺点:1.提高了系统的复杂度。使用场景:一些方法通用,一些方法不通用,却在每一个子类都重新写了这所有的方法。类图:模板代码:抽象模板类 sta...原创 2019-11-05 09:14:23 · 407 阅读 · 1 评论 -
桥接模式
定义:如果某个类存在两个独立变化的维度,可以运用桥接模式将这两个维度分离出来,使两者可以独立扩展。与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系就像一条桥一样优点:1.分离抽象接口及其实现部分。提高了比继承更好的解决方案。 2.子类的数目减少了。 3.桥接模式提高了系统的可扩充性,...原创 2019-11-05 09:14:12 · 515 阅读 · 1 评论 -
享元模式
定义:面向对象技术可以很好地解决一些灵活性或可扩展性问题,但在很多情况下需要在系统中增加类和对象的个数。当对象数量太多时,将导致运行代价过高,带来性能下降等问题。优点:1.减少了对象的创立,减少了内存的使用缺点:1.提高了系统的复杂度。 2.需要分离出内部状态和外部状态,而外部状态具有固化特性,不应该随着内部状态的改变而改变使用场景:1.String常量池、数据...原创 2019-10-17 15:27:27 · 487 阅读 · 1 评论 -
组合模式
定义:将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。(为具有上下级关系两类提供共同的接口,创建了属性结构)目的:1.使两个对象拥有属性结构。 2.使上下级的类拥有相同的接口。优点:1.屏蔽了类的不一致,客户可以通过相同的方式调用不同的层级。2.对客户实现了封装...原创 2019-10-16 19:42:15 · 452 阅读 · 1 评论 -
外观模式
定义:它为子系统中的一组接口提供一个统一的高层接口。这一接口使得子系统更加容易使用。(体现为service和dao,一个service可以调用多个dao)目的:对多个方法进行封装,提供出一个统一的接口。优点:1.实现客户端和子系统的松耦合,让子系统内部的模块能更容易扩展和维护2.对客户实现了封装 3.提供了统一的接口缺点:1.增加新的子...原创 2019-10-16 16:45:47 · 410 阅读 · 1 评论 -
建造者模式
定义:将一个复杂对象的构造与它的表示分离(ConcreteBuilder 负责表示,Director负责构建),使同样的构建过程(Director可以构建不同的对象)可以创建不同的表示,这样的设计模式被称为建造者模式。(常与模板模式一起使用)使用场景:1、当对象的构建过程十分复杂,需要与表示分离的时候。 2、当对象的表示有不同种类,需要加以区分的时候...原创 2019-10-16 15:42:10 · 445 阅读 · 1 评论 -
策略模式和状态模式的区别
策略模式和状态模式的类图相同,目的都是为了解耦,但是还有很多的区别策略模式public classs 我{ //打扮 void dressUp(); //娱乐 void entertainment(Grade grade){ grade.entertainment(); } //买车 void buyCar();}...原创 2019-10-16 10:45:21 · 678 阅读 · 1 评论 -
状态模式
定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类结构:就是在把所有情况拆分成多个类,在调用时把这些类分别set进去。场景:在玩lol时 有攻击,行走,技能使用,那么按照状态模式分,就分为正常时三个行为的状态,被控制是这三个行为的状态,被眩晕时这三个行为的状态。优点:1.减少if else的使用2.减少耦合度,是扩展更容易缺点:使...原创 2019-10-16 10:59:04 · 427 阅读 · 1 评论 -
策略模式
场景:当不同条件调用不同的算法或者策略时。优点:1.可以减少大量的if else,减少耦合度。 2.方便扩展和维护缺点:1.类的数量变多,机构变复杂了。 2.向外暴露了策略类图:代码:策略接口public interface Strategy {public void method();}策略实现publi...原创 2019-10-15 16:29:44 · 455 阅读 · 1 评论 -
适配器,代理模式,装饰者模式区别的个人理解
适配器模式:主要强调适配,在不使用继承的情况下,可以调用其他不同的接口。代理模式:主要强调控制,被代理的类不一定执行,可能不允许被代理。装饰者模式:主要强调增强,目的是在原类中加入需要装饰。而被装饰者一般情况下都会被执行...原创 2019-10-16 08:24:16 · 497 阅读 · 1 评论 -
适配器模式
目的:原接口的参数等不满足现有条件,或者完全不同,同时不想改变原接口。优点:1.可以让任何两个没有关联的类一起运行 2。提高了类的复用,解决了现存类和复用环境要求不一致的问题缺点:增加了类的数量,增加了结构的复杂性。类适配器:适配器需要实现接口类图:代码:新增的接口(想调用老接口)interface Target{ pu...原创 2019-10-16 08:24:29 · 446 阅读 · 1 评论 -
装饰者模式
一.装饰者模式定义:装饰模式是在不改变原类文件和不使用继承的情况下,动态的扩展一个对象的功能。(一个类包裹被增强类)目的:在不改变原文件条件下对类进行增强。优点:1.动态增强2.不改变原文件,不使用继承 3.可以叠加装饰缺点:使类增多,结构变复杂。类图:代码:被增强类接口public interface Com...原创 2019-10-15 09:26:20 · 488 阅读 · 1 评论 -
代理模式
概念:委托一个代理类对另一个类进行控制(代理类中有被代理类的对象,同时可以在代理类中增强)使用场景:aop(可以控制被代理类是否被调用,是否被代理)。优点:1.确保被代理类的隐秘性 2.降低耦合性(不用挨个加需要增强的方法)缺点:类数量的增多,结构更复杂。类图:代码:静态代理1 静态代理:静态代理就是把增强的方法写在代理的类中,在编译时就确定...原创 2019-10-16 08:24:47 · 394 阅读 · 1 评论 -
工厂模式
一.简单工厂模式场景:当两种物品实现同一个接口,根据不同场景使用不同物品目的:可以通过一个类根据不同参数实例化不同的物品,对操作统一处理。优点:1.屏蔽内部 2.对不同的操作进行统一管理缺点:每添加一种类别都需要修改工厂类。所以这个是不提倡的。类图:代码:接口public interface IProduct { public...原创 2019-10-14 13:32:42 · 399 阅读 · 1 评论 -
单例模式
使用场景:在容器中一个对象只存在一个实例。目的:1.防止堆中内存过多。影响效率。 2.无论怎么使用,都规定使用同一个对象实例:获取序列号,任务管理器,计数器等缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。代码:1.饿汉式(线程安全,调用效率高,但是不能延时加载,会占用内存)public clas...原创 2019-10-12 11:35:28 · 455 阅读 · 1 评论