Java设计模式详解
文章平均质量分 73
用简单的Java代码详解Java设计模式,提升代码技巧,体现代码之美
正经程序员·
If you want to go fast, go alone. If you want to go far, go together.
展开
-
设计模式 : 状态模式
状态模式(State) : 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态控制主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化.示例代码State类,抽象状态类,定义一个借口以封装与Context的一个特定状态相关的行为abstract class State{ p...原创 2018-04-07 23:31:06 · 736 阅读 · 0 评论 -
设计模式 : 适配器模式
适配器模式(Adapter) : 将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作. 在软件开发中,也就是系统的数据和行为都正确,但接口不符时,我们希望考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配.适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的类.示例代码Target...原创 2018-04-07 23:38:18 · 1167 阅读 · 0 评论 -
设计模式 : 备忘录模式
备忘录模式(Memento) : 在不破坏封装性的前提下,捕捉一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态.发起人(Originator)类class Originator{ private String state; //需要保存的属性,可能有多个 public String getState() { return state; }...原创 2018-04-08 22:23:31 · 1322 阅读 · 0 评论 -
设计模式 : 组合模式
组合模式 (Composite) ,将对象组合成树形结构以表示, '部分-整体'的层次结构. 组合模式使得用户对单个对象和组合对象的使用具有一致性.Component 为组合中的对象声明接口,在适当情况下,实现所有类共有接口的默认方法.声明一个接口用于访问和管理Component的子部件.abstract class Component{ protected String name; publ...原创 2018-04-08 23:23:18 · 967 阅读 · 0 评论 -
设计模式 : 迭代器模式
迭代器模式(Iterator) : 提供一种方法顺序访问一个聚合对象中各个元素, 而又不暴露该对象的内部表示.什么情况下用迭代器模式当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,你就应该考虑用迭代器模式.你需要对聚集有多种方式遍历时,可以考虑用迭代器模式,为遍历不同的聚集结构提供如开始,下一个,是否结束,当前哪一项等统一的接口.迭代器模式就是分离了集合对象的遍历行为,抽象出一个...原创 2018-04-09 21:35:40 · 1466 阅读 · 0 评论 -
设计模式 : 单例模式
单例模式(Singleton) : 保证一个类仅有一个实例,并提供一个访问它的全局访问点.通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象.一个最好的方法就是,让类自身负责保存它的唯一实例.这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法.示例代码1. 懒汉模式Singleton类,定义一个getInstance操作,允许客户访问它的唯一实例....原创 2018-04-09 22:02:17 · 2174 阅读 · 0 评论 -
设计模式 : 桥接模式
对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现.子类的实现与它的父类有非常紧密的依赖关系.以至于父类实现中的任何变化必然会导致子类发生变化.当你需要复用子类时,如果继承下来的实现不适合新的问题,则父类必须重写或被其他更适合的类替换,这种依赖关系限制了灵活性并最终限制了复用性.合成/聚合复用模式 : 尽量使用合成/聚合,尽量不要使用类继承. 聚合表示...原创 2018-04-10 21:55:09 · 2245 阅读 · 1 评论 -
设计模式 : 命令模式
命令模式(Command) : 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作.示例代码:Command类,用来声明执行操作得劲接口abstract class Command{ protected Receiver receiver; public setCommand(Receiver receiver){ ...原创 2018-04-10 22:24:02 · 2246 阅读 · 0 评论 -
设计模式 : 职责链模式
职责链模式(Chain of Responsibility) : 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象练成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.Handler类,定义一个处理请求的接口abstract class Handler{ protected Handler successor; //设置继任者 pu...原创 2018-04-14 14:16:24 · 2330 阅读 · 0 评论 -
设计模式 : 中介者模式
尽管将一个系统分割成许多对象通常可以增加其复用性,但是对象间相互连接的激增又会降低其可复用性.大量的连接使得一个对象不可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体.所以,对系统的行为进行较大的改动就变得十分困难了.接下来就要使用中介者模式了.中介者模式(Mediator) : 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地...原创 2018-04-14 15:05:13 · 2344 阅读 · 0 评论 -
设计模式 : 享元模式
享元模式(Flyweight) : 运用共享技术有效地支持大量细粒度的对象.Flyweight类,它是所有具体享元类的超类或接口,通过这个接口,Flyweight可以接受并作用于外部状态.abstract class Flyweight{ public abstract void Operation(int extrinsicstate);}ConcreteFlyweight是继承Fly...原创 2018-04-14 15:42:06 · 2569 阅读 · 0 评论 -
设计模式 : 解释器模式
解释器模式(interpreter) : 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子,这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题.AbstractExpression(抽象表达式) ,表明一个...原创 2018-04-14 16:31:01 · 2794 阅读 · 0 评论 -
设计模式 : 访问者模式
访问者模式(Visitor) : 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 访问者模式适用于数据结构相对稳定的系统. 它把数据结构和作用于结构上操作之间的耦合解脱开,使得操作集合可以相对自由地演化. 访问者模式的目的是要把处理从数据结构分离出来.很多系统可以按照算法和数据结构分开,如果这样的系统有比较稳...原创 2018-04-14 22:23:45 · 2601 阅读 · 0 评论 -
设计模式终章 : 如何使用设计模式
设计模式使用的问题1.不要为了使用设计模式而使用设计模式2.设计模式并不会将代码变得更复杂,设计模式使得面向对象设计更灵活,优雅,最终复用性更好.3.设计模式帮助设计者将新的设计建立在以往工作的基础上,复用以往成功的设计方案.设计模式将带来什么?设计模式主要会从以下几个方面影响你在设计面向对象软件的方式.1.一套通用的设计词汇 计算机科学家们对算法和数据结构进行命名和分类,但我们却很少...原创 2018-04-15 17:41:09 · 6103 阅读 · 0 评论 -
设计模式: 工厂模式(Java理解)
最近在写代码之余,把之前买一架子书,都翻了出来,想利用闲暇的时间多学习一些知识. 手头上有一本<大话设计模式>,还有一本Design Patterns,结合这两本书,总结一下设计模式的相关知识,提升自己的编程能力. 其实很多设计模式,在之前的项目中,都有所用到,现在算是做一个总结吧,打算写成一个系列,算是自己的备忘手册,也让大家学习学习.首先了解一...原创 2018-03-29 22:51:44 · 4443 阅读 · 0 评论 -
设计模式 : 策略模式(Java理解)
面向对象的编程,并不是类越多越好,类的划分是为了封装,而分类的基础是抽象,具有相同属性和功能的抽象集合才是类. 策略模式(Strategy) : 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的用户.Strategy类,定义所有支持的算法的公共接口//抽象算法类abstract class Strategy{ //算法方...原创 2018-03-29 22:55:10 · 2728 阅读 · 0 评论 -
设计模式 : 单一职责原则
单一职责原则(SRP) : 就一个类而言,应该仅有一个引起它的变化的原因.软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离,其实要去判断是否应该分离出一个类,也不难,就是如果你能想到多余一个动机去改变一个类,那么这个类就具有多于一个的职责,就应该考虑类的职责分离.原理 如果一个类承担的职责过多,就等于把这些职责耦合在一起了。一个职责的变化可能会削弱或者抑制这个类完成其他职责...原创 2018-03-30 14:00:25 · 2026 阅读 · 0 评论 -
设计模式 : 开放-封闭原则
开放-封闭原则(The Open-Closed Principle ,简称OCP)或叫开-闭原则. 开放-封闭原则,是说软件实体(类,模块,函数等等) 应该可以扩展,而不是修改. 开-闭原则有两个特征,对于拓展是开放的(Open for extension),对于更改是封闭的(Closed for modification). 关于开放封闭原则,其核心的思想是: 软...原创 2018-03-30 14:22:29 · 1347 阅读 · 0 评论 -
设计模式 : 依赖倒转原则
依赖倒转原则 : A . 高层模块不应该依赖底层模块.两个模块都应该依赖抽象. B . 抽象不应该依赖细节.细节应该依赖抽象. 依赖倒转原则的核心在于,在编程中,应该针对接口编程,而不是针对实现编程. 面向过程的开发时,为了提高代码的复用率,一般会把常用的代码写成许许多多的程序库.这样做,在开发新项目的时候,只要调用这些低层的函数就可以了.这就...原创 2018-03-31 17:52:42 · 2197 阅读 · 0 评论 -
设计模式 : 装饰模式
装饰模式还是有点不容易理解的,不向前几种设计模式比较好理解,需要自己深入研究一下装饰模式(Decorator) : 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. Component 是定义一个对象接口,可以给这些对象动态地添加职责,ConcreteComponent是定义了一个具体的对象,也可以给这个对这个对象添加一些职责.Decorator,装饰抽...原创 2018-03-31 21:13:46 · 611 阅读 · 0 评论 -
设计模式 : 代理模式
代理模式(Proxy) : 为其他对象提供一种代理以控制对这个对象的访问.这样做的好处是,可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。最容易理解的代理模式,就是Windows的快捷方式,用快捷方式来访问...原创 2018-03-31 21:41:10 · 2072 阅读 · 0 评论 -
设计模式 : 原型模式
原型模式(Prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何的细节.下面是基本的原型模式的代码原型类public interface Prototype{ /** * 克隆自身的方法 * @return 一个从自身克隆出来的对象 */ public ...原创 2018-04-01 22:21:06 · 1218 阅读 · 0 评论 -
设计模式 : 模板方法模式
模板方法模式(TemplateMethod) :定义一个算法中的操作框架,而将一些步骤延迟到子类中。使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。(Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasse...原创 2018-04-01 22:24:46 · 1200 阅读 · 0 评论 -
设计模式 : 迪米特法则(最少知识原则)
迪米特原则(LoD) : 如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用.如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个应用. 迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开. 迪米特原则是强调了类之间的松耦...原创 2018-04-02 09:37:23 · 1545 阅读 · 0 评论 -
设计模式 : 外观模式
外观模式(Facade) : 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一系统更加容易使用.四个子系统的类class SubSystemOne{ public void MethodOne(){ System.out.println("子系统方法一"); }}class SubSystemTwo{ public void MethodTwo()...原创 2018-04-02 09:57:54 · 1382 阅读 · 0 评论 -
设计模式 : 建造者模式
建造者模式(Builder) :将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.那么Builder是什么呢?概括的说,是为创建一个Product对象的各个组件指定的抽象接口,ConcreteBuilder就是具体的建造者,实现Builder接口,构造和装配各个部位,Product就是那些具体的产品角色,Director是指挥者,用来根据用户的需求构建对象,它是构建一个使用...原创 2018-04-04 14:25:28 · 1179 阅读 · 0 评论 -
设计模式 : 观察者模式
观察者模式又叫发布-订阅(publish/subscribe)模式.观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己.观察者模式的特点: 观察者模式的动机是讲一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象间的一致性.我们不希望为了维持一致性而使各类紧密耦...原创 2018-04-04 14:55:11 · 1381 阅读 · 0 评论