![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 81
佳亮
这个作者很懒,什么都没留下…
展开
-
适配器模式
简介:适配器模式是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能使用场景:一个实体对象不仅拥有自身的功能,还需要别的实体的功能。这种情况就需要用到适配器进行连接,使这个实体实现多功能。适配器模式经常使用依赖。下面的例子是一个“门”和“防盗器材”之间的关系。单纯的“门”只有关和闭的功能,不...原创 2018-04-08 10:30:25 · 129 阅读 · 0 评论 -
空对象模式
简介:在空对象模式中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。下面的代码是根据学生id和那么创建学生对象的例子。如果...原创 2018-05-11 10:47:03 · 184 阅读 · 0 评论 -
策略模式
简介:在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。策略模式和状态模式比较类似。下面的代码中,“策略”就是对数组的处理方式,不同的策略下,对数组的处理方式也不同。/** *定义一个策略的抽象类,用于对数组进行处理...原创 2018-05-11 16:06:42 · 535 阅读 · 0 评论 -
责任链模式
简介:这种设计模式使多个对象都有机会处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。下面的例子是一个关于“开会,请假,出差”的例子,这三个业务处理器执行起来有顺序。开会的处理器可以执行...原创 2018-04-27 12:11:14 · 268 阅读 · 0 评论 -
中介者模式
简介:中介者模式是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。使用场景:1.一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解。2.一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。3.想定制一个分布在多个类中的行为,但又不想生成太多的子类。自己的...原创 2018-05-07 16:35:53 · 127 阅读 · 0 评论 -
解释器模式
简介:解释器模式提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。适用场景: 1、可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。 2、一些重复出现的问题可以用一种简单的语言来进行表达。 3、一个简单语法需要解释的场景。解释器模式一般使用较少,在开发中碰到类似场景可以使用expre...原创 2018-05-21 11:29:11 · 526 阅读 · 0 评论 -
备忘录模式
简介:备忘录模式保存一个对象的某个状态,以便在适当的时候根据某一状态恢复对象。备忘录模式属于行为型模式。应用实例:①游戏存档。②Windows 里的 ctri + z撤销。③浏览器中的后退。④数据库事物中的回滚。结构:发起者角色(Originator):负责创建一个备忘录用以记录当前时刻它的内部状态,并可以使用备忘录恢复内部状态。备忘录角色(Memento):负责存储Originator对象的内部...原创 2018-05-08 11:09:55 · 138 阅读 · 0 评论 -
模板模式
简介:在模板模式中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。主要解决:一些方法通用,却在每一个子类都重新写了这一方法。注意:一般模板方法都加上 final 关键词。下面的例子是关于计算代码执行时间的。如果程序中多处需要计算代码的执行时间,那么可以将这个功能抽象出来。/** * 定义一个模板类...原创 2018-05-15 10:10:16 · 740 阅读 · 0 评论 -
观察者模式
简介:当对象间存在一对多关系时,则使用观察者模式。比如,当一个对象被修改时,则会自动通知它的依赖对象。这些对象会自动更新自己。观察者模式属于行为型模式。JDK中已经有了支持观察者模式的类。类似场景:网游中,当玩家的状态发生变化时(比如血量,位置),服务器需要将该玩家的最新状态发送给其他玩家。自己的理解:①目标对象(被观察对象)对应的类种需要一个List存放观察者们。②观察者类中一般有一个updat...原创 2018-05-08 16:21:08 · 112 阅读 · 0 评论 -
访问者模式
简介:在访问者模式中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。意图:将数据结构和数据操作分离。注意:在访问者模式中,一些代码结构和方法名约定俗成。/** *抽象元素类,accept方法表示需要接收的访问者。method是需...原创 2018-05-15 16:22:23 · 419 阅读 · 0 评论 -
状态模式
简介:在状态模式中,类的行为是基于它的状态改变的,类的状态改变,该类的行为也会随着状态改变而改变。这种类型的设计模式属于行为型模式。适用场景:①行为随状态的改变而改变;②可以作为if else 判断语句或者switch语句的代替者,状态模式中每个条件分支对应一个类。/** *创建一个状态的接口 */public interface State { String getState();}...原创 2018-05-09 11:02:11 · 135 阅读 · 0 评论 -
命令模式
简介:是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。关键代码:命令的发布者(调用者)一般持有命令接口的引用;具体的命令类持有命令的执行者(被调用者)对象。一个非常简单的例子:领导发布命令,员工去执行。领导是命令的发布者,持有命令接口的引用。员工是命令的执行者,被一个具体的命...原创 2018-05-02 10:54:21 · 138 阅读 · 0 评论 -
桥接模式
简介:桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。使用场景:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。侧重点在于:一方是经常变化着的本例中,厨师可以做菜,但菜的种类很多,厨师每天做的菜都不一样,菜的种类并不是一成不变,而是经常在变化。在这种场景中,就需要用...原创 2018-04-08 14:32:20 · 109 阅读 · 0 评论 -
过滤器模式
简介:这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。在本例中,以水果作为过滤的对象。水果的颜色和口味各有差别。有时我们只需要酸味的水果,有时只需要黄色的水果,这种情况下,就需要用到过滤器模式,根据一定的标准进行筛选。/** *创建一个水果类,属性包括名称,口味和颜色 */public ...原创 2018-04-09 15:37:54 · 146 阅读 · 0 评论 -
工厂模式
意义:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。使用场景:当创建一个对象的逻辑非常复杂时,可以使用工厂模式将创建对象的逻辑封装起来,需要用到该对象时直接从工厂类获取,而不是去new一个对象再进行繁杂的配置。或者一个接口下有很多的子类,创建这些子类对象时,只需要知道名称,就可以通过工厂类创建子类,采用多态的方式获取子类的引用。/** *创建一个...原创 2018-04-03 11:27:43 · 157 阅读 · 0 评论 -
抽象工厂模式
前言:在网上了解了下抽象工厂模式,自己也动手写了抽象工厂模式的代码。然而抽象工厂模式确实比较抽象。我的理解可能不到位,下面的个人理解要是有不对的地方,欢迎指正,还希望不要误导了大家。意义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。使用场景:当一个事物拥有多个属性,而每一个属性又是可以进一步进行抽象的。顾名思义,“抽象工厂模式”对于工厂也进行了抽象,也就是说,工厂也是一个接...原创 2018-04-03 17:41:23 · 118 阅读 · 0 评论 -
组合模式
简介:组合模式又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。使用场景:部分、整体场景,如树形菜单,文件、文件夹的管理,公司的人事管理(总经理和部门经理,部门经理和员工)。比如树形菜单有子级和父级,在定义时,只需要定义一个类,类种的属性指明该对象的父级对象是谁即可,这样...原创 2018-04-11 15:30:02 · 169 阅读 · 0 评论 -
单例模式
单例模式是最简单,很常见的设计模式。一般单例模式分为懒汉式和饿汉式。懒汉式涉及线程安全,而饿汉式在类加载时就已经生成实例,不涉及线程安全问题,但却不是懒加载。除了懒汉式和饿汉式,还可以通过静态内部类和枚举创建单例模式。单例模式用于只能有一个对象的场景。/** *懒汉式,线程不安全。当有多个线程同时执行getInstance时, *很有可能出现多个实例。这种方式只适用于单线程的场景 */pu...原创 2018-04-04 11:03:46 · 101 阅读 · 0 评论 -
建造者模式
适用场景:一个复杂的对象由对个简单的对象一步步组成。一般需要一个Builder类一步一步生成该对象。该Builder对象是独立的。解决的问题:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。在本例中,以做菜为例,一份菜需要多种食材,而食材大概分为...原创 2018-04-04 15:36:18 · 117 阅读 · 0 评论 -
原型模式
适用场景:当创建一个对象代价比较大时,可以复用已经存在的对象,从已经存在的对象中“克隆”出一个对象简而言之,就是对象的克隆,java提供了这种直接克隆的机制。public abstract class Animal implements Cloneable { private Integer id; private String name; abstract void eat(); ...原创 2018-04-04 17:19:23 · 127 阅读 · 0 评论 -
外观模式
理解可能不甚准确,如有错误,还请指出,多谢!简介:隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。简而言之:就是隐藏系统实现的复杂性,只暴露简单的接口供用户使用。这种设计模式运用比价多,比如java web的三层开...原创 2018-04-17 14:03:56 · 131 阅读 · 0 评论 -
装饰器模式
简介:装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。装饰器模式可以少写很多复杂的逻辑,复杂的逻辑直接调用被装饰者的方法。装饰器模式一般需要共同实现一个接口或者继承一个类,装饰者和被装饰者共同的方法,方法名一般要保持统一。在j...原创 2018-04-13 14:45:14 · 132 阅读 · 0 评论 -
MVC模式
简介:MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。①Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。②View(视图) - 视图代表模型包含的数据的可视化。③Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变...原创 2018-05-16 10:26:24 · 155 阅读 · 0 评论