设计模式
阿云_
这个作者很懒,什么都没留下…
展开
-
设计模式学习与整理-目录篇
在学习编程和实际编程工作中,设计模式是很重要的一部分。从今天起,我就要开始系统地学习并整理设计模式。下列目录黑体字将逐步变成超链接。 1.设计模式学习与整理 - 命令模式2.设计模式学习与整理 - 策略模式3.设计模式学习与整理 - 模板方法模式 4.设计模式学习与整理 - 观察者模式 5.设计模式学...原创 2018-04-07 16:04:15 · 361 阅读 · 2 评论 -
设计模式学习与整理-单例模式
前言单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、...原创 2019-07-18 22:31:13 · 149 阅读 · 0 评论 -
设计模式学习与整理-建造者模式
介绍我们假设一个快餐店的案例,快餐店中有很多种类的汉堡、薯条和饮料。客人每次点的餐都可能不一样。这样这些食物的搭配就会有很多种。建造者模式(Builder Pattern)属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。应用场景一些基本部件不会变,而其组合经常变化的时候。代码案例模拟...原创 2019-06-25 14:46:09 · 192 阅读 · 0 评论 -
设计模式学习与整理-抽象工厂模式
介绍是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。应用场景(1)系统需要为用户提供多个对象,但不希望用户直接用new运算符实例化这些对象,即希望用户和创建对象脱耦。(2)系统需要为用户提供一系列对象,但只需要知道这些对象有哪些方法可用,不需要用户知道这些对象的创建过程。模式结构(1)抽象产品(...原创 2019-06-24 09:59:37 · 212 阅读 · 0 评论 -
设计模式学习与整理-原型模式
介绍原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来...原创 2019-06-25 17:12:00 · 154 阅读 · 0 评论 -
设计模式学习与整理-工厂方法模式
介绍工厂方法模式(Factory Method Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,定义一个用于创建对象的接口,让子类决定实例化哪一个类。应用场景(1)用户需要一个实例,关心创建的细节。(2)用户需要一个类子类的实例,但不希望与该类的子类形成耦合。模式结构(1)抽象产品(...原创 2019-04-23 00:37:18 · 212 阅读 · 0 评论 -
设计模式学习与整理-迭代器模式
介绍迭代器模式(Iterator Pattern)用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 迭代器模式属于行为型模式。应用场景(1)让用户访问一个集合中对象,但不想暴露对象在集合中的存储结构。(2)希望对遍历不同的集合提供一个统一的接口。模式结构(1)集合(Aggregate):一个接口,规定了具体集合需实现的操作。(2)具体集合(ConcreteAggr...原创 2019-04-17 23:10:58 · 173 阅读 · 0 评论 -
设计模式学习与整理-外观模式
介绍外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个可以访问的接口。这种类型的设计模式属于结构型模式。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。应用场景(1)对于一个复杂的子系统,需要为用户提供一个简单的交互操作。(2)不希望客户代码和子系统中的类有耦合,以便提高子系统的独立性和可移植性。(3)当整个系统...原创 2019-04-16 21:25:28 · 149 阅读 · 0 评论 -
设计模式学习与整理-中介者模式
介绍中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。例如,在一个房屋租赁系统中,有很多求租者和出租者,如果要求他们之间必须认识才能进行有关租赁的操作,显然不利于系统的维护和发展。因此,每当有新的出租者或求租者加入该系统,这个新的加入者必须和现...原创 2019-04-21 17:06:09 · 176 阅读 · 0 评论 -
设计模式学习与整理-适配器模式
介绍适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式。举个简单的例子,读卡器作为电脑和内存卡的适配器,把内存卡放到读卡器中,再将读卡器插入电脑,电脑就可以读取内存卡的数据。应用场景1、系统需要使用现有的类,而此类的接口不符合系统的需要模式结构1. 目标(Target):目标是一个接口,该接口是客户想使用的接口。...原创 2019-04-09 20:29:21 · 617 阅读 · 0 评论 -
设计模式学习与整理-责任链模式
介绍责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。对请求的发送者和接收者进行解耦。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。应用场景(1)有许多对象可以处理用户的请求,希望程序在运行期间自动确定处理用户的那个对象。(2)希望用户...原创 2019-04-15 21:26:07 · 168 阅读 · 0 评论 -
设计模式学习与整理-装饰器模式
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。应用场景对原有的类进行扩展,但是不想修改原有的类或者增加新的子类。模式结构1. 抽象组件:是一个抽象类或者接口,定义了需要增强的方法。2. 具体组件:实现抽象组件,具体组件的实例称为 “ 被装饰者 ” 。3. 装饰:...原创 2019-04-01 20:24:15 · 198 阅读 · 0 评论 -
设计模式学习与整理-观察者模式
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。应用场景当一个对象的数据更新时需要通知其他对象,但这个对象又不希望和被通知的那些对象形成紧耦合。模式结构1.主题(Subject):是一个接口,定义了具体主题需要实现的方法,比如:添加观察者、通知所有观察者。2.观察者(O...原创 2019-03-30 14:15:06 · 198 阅读 · 0 评论 -
设计模式学习与整理-模板方法模式
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。应用场景1、有多个子类共有的方法,且逻辑相同。2、重要的、复杂的方法,可以考虑作为模板方法。模式结构1、抽象模板(Abstract Template):抽象模板是一个抽象类。抽象模板...原创 2019-03-26 20:24:16 · 217 阅读 · 0 评论 -
白话设计模式六大原则
前言不管你是一个android程序员还是ios,后台程序员,一个好的程序员,不是只会埋头敲代码可以造就的,有时候抬头思考肿么把以后的代码写的更好更有价值。设计模式是一种思考肿么构造代码的方法。今天想结合例子谈谈设计模式的六大基本原则。希望能简单点把问题说清楚,避免高大上的定义,虚无缥缈的遣词造句。1.单一职责原则一开始我需要一只会吃吃喝喝的宠物,于是我写了public class...转载 2018-10-13 16:05:48 · 257 阅读 · 0 评论 -
设计模式学习与整理-策略模式
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。使用场景: 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一种。 3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好...原创 2018-04-12 20:53:25 · 231 阅读 · 0 评论 -
设计模式学习与整理-命令模式
应用场景: 在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。模式结构: Command:定义命令的统一接口 ConcreteCommand:Command接口的实现者,用来执行具体的命令,某些情况下可以直接用来...原创 2018-04-09 23:51:24 · 254 阅读 · 0 评论 -
自己动手实现牛逼的单例模式
其实写这篇文章之前,我犹豫了一下,毕竟单例大家都知道,写这么一篇文章会不会让人觉得老掉牙。后来想想,就当一种记录吧。先来一副漫画吧,如下图所示ok,我们回顾下小灰的遭遇,上述漫画所提出的那些问题主要有以下三点:为什么静态内部类的单例模式是最推荐的? 如何在反射的情况下保证单例? 如何在反序列化中保证单例?针对上述三个问题有了这篇文章,以一种循序渐进的方式,引出最后一种单例设计模式,希望...转载 2019-07-18 22:55:24 · 217 阅读 · 0 评论