
设计模式
文章平均质量分 92
iteye_21328
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式之单例模式
单例模式(Singleton Pattern) 前面说提到的五种创建模式,主要解决的问题是如何创建对象,获得产品。而单例模式最要关心的则是对象创建的次数以及何时被创建。 Singleton模式可以是很简单的,它的全部只需要一个类就可以完成(看看这章可怜的UML图)。但是如果在“对象创建的次数以及何时被创建”这两点上较真起来,Singleton模式可以相当的复杂,比头五种模式加起来还复杂...原创 2010-11-13 22:11:13 · 72 阅读 · 0 评论 -
设计模式-单例模式4(转)
3.8 在Java中一种更好的单例实现方式 根据上面的分析,常见的两种单例实现方式都存在小小的缺陷,那么有没有一种方案,既能够实现延迟加载,又能够实现线程安全呢? 还真有高人想到这样的解决方案了,这个解决方案被称为Lazy initialization holder class模式,这个模式综合使用了Java的类级内部类和多线程缺省同步锁的知识,很巧妙的同时实现了...原创 2010-11-14 16:17:27 · 109 阅读 · 0 评论 -
设计模式-装饰器模式1(转)
装饰模式(Decorator)1 场景问题1.1 复杂的奖金计算 考虑这样一个实际应用:就是如何实现灵活的奖金计算。 奖金计算是相对复杂的功能,尤其是对于业务部门的奖金计算方式,是非常复杂的,除了业务功能复杂外,另外一个麻烦之处是计算方式还经常需要变动,因为业务部门经常通过调整奖金的计算方式来激励士气。 先从业务上看看现有的奖金计算方式的复...原创 2010-11-14 16:56:32 · 96 阅读 · 0 评论 -
设计模式-装饰器模式2(转)
2 解决方案2.1 装饰模式来解决 用来解决上述问题的一个合理的解决方案,就是使用装饰模式。那么什么是装饰模式呢?(1)装饰模式定义(2)应用装饰模式来解决的思路 虽然经过简化,业务简单了很多,但是需要解决的问题不会少,还是要解决:要透明的给一个对象增加功能,并实现功能的动态组合。 所谓透明的给一个对象增加功能,换句话说就是要给一个对...原创 2010-11-14 17:03:00 · 99 阅读 · 0 评论 -
设计模式-装饰器模式3(转)
3 模式讲解3.1 认识装饰模式(1)模式功能 装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象增加功能,相当于是改变了对象的外观。当装饰过后,从外部使用系统的角度看,就不再是使用原始的那个对象了,而是使用被一系列的装饰器装饰过后的对象。 这样就能够灵活的改变一个对象的功能,只要动态组合的装饰器发生了改变,那么最终所得到的对象的功能也就发生了改...原创 2010-11-14 17:10:46 · 95 阅读 · 0 评论 -
设计模式-装饰器模式4(转)
而在每个模块内部呢?就拿大家都熟悉的三层架构来说,也是从上到下来考虑的,通常是表现层调用逻辑层,逻辑层调用数据层,如图6所示:图6 三层架构示意图 慢慢的,越来越多的人发现,在各个模块之中,存在一些共性的功能,比如日志管理、事务管理等等,如图7所示: 图7 共性功能示意图 这个时候,在思考这些共性功能的时候,是从横向在思考问题,与通常面向对...原创 2010-11-14 17:23:10 · 93 阅读 · 0 评论 -
设计模式-命令模式1(转)
命令模式也是开发中常见的一个模式,也不是太难,比较简单,下面来详细的写一下命令模式。 命令模式(Command)1 场景问题 1.1 如何开机 估计有些朋友看到这个标题会非常奇怪,电脑装配好了,如何开机?不就是按下启动按钮就可以了吗?难道还有什么玄机不成。 对于使用电脑的客户——就是我们来说,开机确实很简单,按下启动按钮,然后耐心等待就可以...原创 2010-11-14 18:48:05 · 108 阅读 · 0 评论 -
设计模式-命令模式2(转)
3 模式讲解3.1 认识命令模式(1)命令模式的关键 命令模式的关键之处就是把请求封装成为对象,也就是命令对象,并定义了统一的执行操作的接口,这个命令对象可以被存储、转发、记录、处理、撤销等,整个命令模式都是围绕这个对象在进行。(2)命令模式的组装和调用 在命令模式中经常会有一个命令的组装者,用它来维护命令的“虚”实现和真实实现之间的关系。如果是超级智能的命...原创 2010-11-14 18:52:14 · 91 阅读 · 0 评论 -
设计模式-命令模式3(转)
3.3 可撤销的操作 可撤销操作的意思就是:放弃该操作,回到未执行该操作前的状态。这个功能是一个非常重要的功能,几乎所有GUI应用里面都有撤消操作的功能。GUI的菜单是命令模式最典型的应用之一,所以你总是能在菜单上找到撤销这样的菜单项。 既然这么常用,那该如何实现呢? 有两种基本的思路来实现可撤销的操作,一种是补偿式,又称反操作式:比如被撤销的操作是...原创 2010-11-14 18:56:40 · 84 阅读 · 0 评论 -
设计模式-命令模式4(转)
3.4 宏命令 什么是宏命令呢?简单点说就是包含多个命令的命令,是一个命令的组合。举个例子来说吧,设想一下你去饭店吃饭的过程: (1)你走进一家饭店,找到座位坐下 (2)服务员走过来,递给你菜谱 (3)你开始点菜,服务员开始记录菜单,菜单是三联的,点菜完毕,服务员就会把菜单分成三份,一份给后厨,一份给收银台,一份保留备查。 ...原创 2010-11-14 18:59:56 · 100 阅读 · 0 评论 -
设计模式-命令模式5(转)
3.5 队列请求 所谓队列请求,就是对命令对象进行排队,组成工作队列,然后依次取出命令对象来执行。多用多线程或者线程池来进行命令队列的处理,当然也可以不用多线程,就是一个线程,一个命令一个命令的循环处理,就是慢点。 继续宏命令的例子,其实在后厨,会收到很多很多的菜单,一般是按照菜单传递到后厨的先后顺序来进行处理,对每张菜单,假定也是按照菜品的先后顺序进行制作,那么...原创 2010-11-14 19:03:19 · 88 阅读 · 0 评论 -
设计模式-单例模式3(转)
3.3 延迟加载的思想 单例模式的懒汉式实现方式体现了延迟加载的思想,什么是延迟加载呢? 通俗点说,就是一开始不要加载资源或者数据,一直等,等到马上就要使用这个资源或者数据了,躲不过去了才加载,所以也称Lazy Load,不是懒惰啊,是“延迟加载”,这在实际开发中是一种很常见的思想,尽可能的节约资源。 体现在什么地方呢?看如下代码:3.4 缓存...原创 2010-11-14 16:15:54 · 85 阅读 · 0 评论 -
设计模式-单例模式2(转)
3 模式讲解3.1 认识单例模式(1)单例模式的功能 单例模式的功能是用来保证这个类在运行期间只会被创建一个类实例,另外单例模式还提供了一个全局唯一访问这个类实例的访问点,就是那个getInstance的方法。不管采用懒汉式还是饿汉式的实现方式,这个全局访问点是一样的。 对于单例模式而言,不管采用何种实现方式,它都是只关心类实例的创建问题,并不关心具体的业务...原创 2010-11-14 16:11:46 · 70 阅读 · 0 评论 -
设计模式之简单工厂
第一步:/*******************新建一个Apple类**********************/ public class Apple { /** * 采集 */ public void get() { System.out.println("采集苹果"); } ...原创 2010-11-13 22:40:16 · 77 阅读 · 0 评论 -
设计模式-简单工厂
第2章 简单工厂 简单工厂不是一个标准的设计模式,但是它实在是太常用了,简单而又神奇,所以需要好好掌握它,就当是学习设计模式的热身运动吧。为了保持一致性,我们尽量按照学习其他模式的步骤来进行学习。2.1 场 景 问 题大家都知道,在Java应用开发中,要“面向接口编程”。那么什么是接口?接口有什么作用?接口如何使用?我们一起来回顾一下。2.1.1 接口...原创 2010-11-14 00:33:31 · 99 阅读 · 0 评论 -
设计模式-工厂方法(转)
工厂方法模式(Factory Method)1 场景问题1.1 导出数据的应用框架 考虑这样一个实际应用:实现一个导出数据的应用框架,来让客户选择数据的导出方式,并真正执行数据导出。 在一些实际的企业应用中,一个公司的系统往往分散在很多个不同的地方运行,比如各个分公司或者是门市点,公司没有建立全公司专网的实力,但是又不愿意让业务数据实时的在广域网上传递,...原创 2010-11-14 13:28:23 · 110 阅读 · 0 评论 -
设计模式-抽象工厂(转)
抽象工厂模式中的有以下的四种角色: 抽象工厂(Abstract Factory)角色:担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。 具体工厂(Concrete Factory)角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。 抽象产品(Abstract Product)角色:担任这个角色的类是...原创 2010-11-14 14:25:23 · 70 阅读 · 0 评论 -
设计模式-建造者模式(转)
建造者模式 这个是zmo_xu的java设计模式系列的第三章.这里需要说明一下 我这里给出的代码并不是标准代码,应该说是我自己的学习笔记,拿出来与大家交流,也希望各位高手多多指教,在这里感谢javastudy给予的帮助!(感谢CCTV ,感谢父母 感谢滚石娱乐的什么就不说了 呵呵 好了 老规矩 言归正传[保存下 哈哈 ])概述在软件系统中,有时候面临着“一个复杂对象”的创建工作,其...原创 2010-11-14 14:49:45 · 149 阅读 · 0 评论 -
设计模式-桥接模式1(转)
桥接模式(Bridge)1 场景问题1.1 发送提示消息 考虑这样一个实际的业务功能:发送提示消息。基本上所有带业务流程处理的系统都会有这样的功能,比如某人有新的工作了,需要发送一条消息提示他。 从业务上看,消息又分成普通消息、加急消息和特急消息多种,不同的消息类型,业务功能处理是不一样的,比如加急消息是在消息上添加加急,而特急消息除了添加特急外,还...原创 2010-11-14 15:37:27 · 98 阅读 · 0 评论 -
设计模式-桥接模式2(转)
2 解决方案 2.1 桥接模式来解决 用来解决上述问题的一个合理的解决方案,就是使用桥接模式。那么什么是桥接模式呢?(1)桥接模式定义 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 (2)应用桥接模式来解决的思路 仔细分析上面的示例,根据示例的功能要求,示例的变化具有两个纬度,一个纬度是抽象的消息这边,包括普通消息、加急...原创 2010-11-14 15:44:14 · 80 阅读 · 0 评论 -
设计模式-桥接模式3(转)
3 模式讲解 3.1 认识桥接模式(1)什么是桥接 在桥接模式里面,不太好理解的就是桥接的概念,什么是桥接?为何需要桥接?如何桥接?把这些问题搞清楚了,也就基本明白桥接的含义了。 一个一个来,先看什么是桥接?所谓桥接,通俗点说就是在不同的东西之间搭一个桥,让他们能够连接起来,可以相互通讯和使用。那么在桥接模式中到底是给什么东西来搭桥呢?就是为被分离了的抽象...原创 2010-11-14 15:49:13 · 76 阅读 · 0 评论 -
设计模式-桥接模式4(转)
3.4 广义桥接-Java中无处不桥接 使用Java编写程序,一个很重要的原则就是“面向接口编程”,说得准确点应该是“面向抽象编程”,由于在Java开发中,更多的使用接口而非抽象类,因此通常就说成“面向接口编程”了。 接口把具体的实现和使用接口的客户程序分离开来,从而使得具体的实现和使用接口的客户程序可以分别扩展,而不会相互影响。使用接口的程序结构如图12所示:...原创 2010-11-14 15:52:47 · 96 阅读 · 0 评论 -
设计模式-单例模式1(转)
单例模式(Singleton) 1 场景问题1.1 读取配置文件的内容 考虑这样一个应用,读取配置文件的内容。 很多应用项目,都有与应用相关的配置文件,这些配置文件多是由项目开发人员自定义的,在里面定义一些应用需要的参数数据。当然在实际的项目中,这种配置文件多采用xml格式的。也有采用properties格式的,毕竟使用Java来读取proper...原创 2010-11-14 16:07:46 · 103 阅读 · 0 评论 -
设计模式-命令模式6(转)
3.7 命令模式的优缺点 更松散的耦合 命令模式使得发起命令的对象——客户端,和具体实现命令的对象——接收者对象完全解耦,也就是说发起命令的对象,完全不知道具体实现对象是谁,也不知道如何实现。 更动态的控制 命令模式把请求封装起来,可以动态对它进行参数化、队列化和日志化等操作,从而使得系统更灵活。 能很自然的复合命令 命令模式中的命令对象,能够很容易的组合成为复...原创 2010-11-14 19:07:09 · 94 阅读 · 0 评论