设计模式
文章平均质量分 69
刘越洋子
好记性不如烂笔头
展开
-
建造模式(Builder)
建造模式(Builder)又叫做生成器使用场景将一个复杂对象(产品)的构建与它的表示分离(建造者的实现),使得同样的构建过程可以创建不同的表示(建造者接口与具体实现类)。特点:1,产品:产品为比较复杂对象。(创建过程繁琐,或者有序。反正是创建过程复杂)2,建造者:用于创建这个复杂产品和返回这个产品(构建与它的表示分离)3,导演:负责调用适当的建造者来组建产品,导演类一般不与原创 2017-08-16 15:15:49 · 323 阅读 · 0 评论 -
命令模式(Command)
命令模式(Command)1.意图将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 例: 老板让员工刷碗,扫地等,如果用命令模式 老板类不需要关心哪个员工去干活,而是关心命令,老板只要发布命令,命令执行就可以了.原创 2018-03-13 17:29:24 · 246 阅读 · 0 评论 -
模板方法模式(TemplateMethod)
模板方法模式(TemplateMethod)1.意图定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 模板方法应用于下列情况: • 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。 • 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。首先识别现有代码中的不同之处原创 2018-03-29 17:32:07 · 250 阅读 · 0 评论 -
访问者模式(Visitor)
访问者模式(Visitor)1.意图表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 在下列情况下使用 Visitor模式: • 一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。 • 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作“污染”这些对象的类。 Visi原创 2018-03-29 18:21:42 · 329 阅读 · 0 评论 -
解释器模式(Interpreter)
解释器模式(Interpreter)1.意图给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 如果一种特定类型的问题发生的频率足够高 , 那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器 , 该解释器通过解释这些句子来解决该问题。原创 2018-03-28 16:56:13 · 792 阅读 · 0 评论 -
迭代器模式(Iterator)
迭代器模式(Iterator)1.意图提供一种方法顺序访问一个聚合对象中各个元素 , 而又不需暴露该对象的内部表示。 针对不同的需要,可能要以不同的方式遍历这个列表。但是即使可以预见到所需的那些遍历操作,你可能也不希望列表的接口中充斥着各种不同遍历的操作。有时还可能需要在同一个表列上同时进行多个遍历。 迭代器模式可用来: • 访问一个聚合对象的内容而无需暴露它的内部表示。 • 支持对聚合对象原创 2018-03-28 17:47:20 · 181 阅读 · 0 评论 -
中介者模式(Mediator)
中介者模式(Mediator)1.意图用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 在下列情况下使用中介者模式 : • 一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。 • 一个对象引用其他很多对象并且直接与这些对象通信 ,导致难以复用该对象。 • 想定制一个分布在多个类中的行为原创 2018-03-29 11:25:15 · 220 阅读 · 0 评论 -
观察者模式(Observer)
观察者模式(Observer)1.意图定义对象间的一种一对多的依赖关系 ,当一个对象的状态发生改变时 , 所有依赖于它的对象都得到通知并被自动更新。 将一个系统分割成一系列相互协作的类有一个常见的副作用:需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,因为这样降低了它们的可重用性。 在以下任一情况下可以使用观察者模式 : • 当一个抽象模型有两个方面 , 其中一个方面依赖原创 2018-03-29 12:44:08 · 208 阅读 · 0 评论 -
23种设计模式总结
23种设计模式总结23种设计模式写了很长时间才全部写完。在这里写下总结以便以后查阅时候方便。1.创建型创建型:除了直接new来实例化对象外,提供了多种隐藏创建逻辑的生成对象的方法1.1 单例模式(Singleton)意图:保证一个类只有一个实例,并且提供全局的访问点。 特点: 1,私有,静态的类属性(instance) 2,私有的构造方法(保证其他类不能实例化此类) 3,公有,静态的访问实例原创 2018-04-17 15:59:03 · 345 阅读 · 0 评论 -
备忘录模式(Memento)
备忘录模式(Memento)1.意图在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 有时有必要记录一个对象的内部状态。为了允许用户取消不确定的操作或从错误中恢复过来,需要实现检查点和取消机制 , 而要实现这些机制,你必须事先将状态信息保存在某处,这样才能将对象恢复到它们先前的状态。原创 2018-03-29 15:23:53 · 174 阅读 · 0 评论 -
状态模式(State)
状态模式(State)1.意图允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 在下面的两种情况下均可使用 State模式: • 一个对象的行为取决于它的状态 , 并且它必须在运行时刻根据状态改变它的行为。 • 一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常 , 有多个操作包含这一相同的条件结构。原创 2018-03-29 16:32:31 · 320 阅读 · 0 评论 -
责任链模式(chain of responsibility)
责任链模式 (chain of responsibility)使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这 些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。原创 2018-03-13 15:32:29 · 245 阅读 · 0 评论 -
单例模式(Singleton)
Java设计模式中,单例模式(Singleton)为最简单常用的设计模式,也是面试中最长被问到的设计模式。原创 2017-08-14 18:09:55 · 282 阅读 · 0 评论 -
抽象工厂(Abstract Factory)
抽象工厂(Abstract Factory)使用场景:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。特点:1,一般是拿抽象工厂与工厂方法做为比较。其中工厂方法如果要添加一个被创建的类,必须的修改工厂类。这违背了设计模式中的开闭原则。2,抽象工厂与工厂方法类似只是对工厂类进行进一步的抽象,让工厂类实现同一个接口。这样如果添加一个新的产品时,需要新建一个实现工原创 2017-08-16 13:16:51 · 355 阅读 · 0 评论 -
工厂方法(Factory Method)
简单工厂(Factory Method) 在工作中的也是很常见的。使用场景:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 Factory Method使一个类的实例化延迟到其子类。原创 2017-08-16 11:20:25 · 366 阅读 · 0 评论 -
原型模式(Prototype)
原型模式(Prototype)使用场景:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。通过new产生一个对象需要非常繁琐的数据准备或访问权限原创 2017-08-16 18:07:18 · 188 阅读 · 0 评论 -
装饰器模式(Decorator)和代理模式(Proxy)
装饰器模式(Decorator)使用场景:动态地给一个对象添加一些额外的职责。就增加功能来说, decorator模式相比生成子类更为灵活原创 2017-08-21 12:55:50 · 1004 阅读 · 0 评论 -
动态代理
动态代理原创 2017-08-28 21:44:06 · 253 阅读 · 0 评论 -
门面模式(Facade)
门面模式(Facade)有叫外观模式1,使用场景为子系统中的一组接口提供一个一致的界面, F a c a d e模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。原创 2017-09-04 11:04:49 · 393 阅读 · 0 评论 -
桥接模式(Bridge)
桥接模式用处很多,最熟知的就是JDBC的使用场景,大家都知道。我们切换数据源的时候只需要改动驱动名称,连接信息,用户名,密码信息就可以切换数据库了。1.意图 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 2.特点 1.把对象的创建与应用分离,交给调用者去根据具体情况创建不同的类。 2.通过桥接类去调用对象的具体方法。原创 2017-09-22 18:26:13 · 472 阅读 · 0 评论 -
组合模式(COMPOSITE)
1.意图将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。2.特点想表示对象的部分-整体层次结构。 希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。 通常树形结构的表都会用到组合模式。原创 2017-10-10 10:38:16 · 231 阅读 · 0 评论 -
享元模式(FLYWEIGHT)
1.意图运用共享技术有效地支持大量细粒度的对象。2.特点抽象享元角色:为具体享元角色规定了必须实现的方法,而外蕴状态就是以参数的形式通过此方法传入。在Java中可以由抽象类、接口来担当。 具体享元角色:实现抽象角色规定的方法。如果存在内蕴状态,就负责为内蕴状态提供存储空间。 享元工厂角色:负责创建和管理享元角色。要想达到共享的目的,这个角色的实现是关键! 客户端角色:维护对所有享元对象的引用原创 2017-10-10 13:44:49 · 292 阅读 · 0 评论 -
适配器模式(Adapter)
1.意图将一个类的接口转换成客户希望的另外一个接口。 Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。2.特点适配器模式主要用于兼容原系统使用,在不改动原系统类的情况进行适配 类适配器模式: 1.新建目标接口包含原有类的方法和新方法。 2.新建适配类 继承原有类,实现目标接口。 对象适配器模式: 1.新建适配类实现目标接口,持有原有类作为属性。定义原有类的方法和原创 2017-10-11 10:23:18 · 256 阅读 · 0 评论 -
策略模式(Strategy)
策略模式(Strategy)1.意图定义一系列的算法 ,把它们一个个封装起来 , 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 当存在以下情况时使用 Strategy模式 • 许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。 • 需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空间 /时间权衡的算法。当这些变体实现为一个算原创 2018-03-29 16:58:08 · 257 阅读 · 0 评论