摘要: 1 概述 外观模式提供了一个统一的接口,用来访问子系统中的一群接口。这样可以避免客户端和子系统之间的紧耦合。 这种模式需要将一系列的子系统组合到外观中,然后将具体的工作交给各个子系统去完成。如此一来,可以简化接口的调用。 其本质就是将系统与客户端交互的地方封装起来。2 示例 这个模式,总体来说,很简单,理解起来也不困难。 依然以手机为例,手机开机的时候,我们只需要按一下电源键,在电源键的触发事件中,包含了CPU的开启、系统加载、SIM卡信息加载等。如果把每一个模块的接口都暴露出来,让我们一个个去按,那岂不是太坑爹了。而现在我们只需要一个开机接口,就可以实现上述所有模块的通电、加载功能,... 阅读全文
posted @ 2013-12-09 21:05 Scott007 阅读(720) 评论(2) 推荐(2) 编辑
摘要: 1 概述 代理模式(Proxy)就是为一个对象创建一个替身,用来控制对当前对象的访问。目的就是为了在不直接操作对象的前提下对对象进行访问。 根据代理类和被代理类的关系来区分的话,可以分为静态代理和动态代理。(1)静态代理:在运行之前,就确定好代理类、被代理类之间的关系。(2)动态代理:在运行时动态的创建一个代理类,实现一个或多个接口,将方法的调用转发到指定的类。 根据不同的功用性,可以分为远程代理、虚拟代理、保护代理、缓存代理、写入代理等。(1)远程代理:为一个位于不同的JVM堆中的对象提供一个本地的代理对象,Java有自带的RMI方式来实现;(2)虚拟代理:为创建开销大的对象提供代理,当对象 阅读全文
posted @ 2013-11-27 22:36 Scott007 阅读(3112) 评论(0) 推荐(2) 编辑
摘要: 1 概述 适配器模式(Adapter),说白了就是为了挂羊头卖狗肉而专门设计的模式。也就是把一个类的接口变换成客户端所期待的另一种接口。 适配器模式通过定义一个新的接口(对要实现的功能加以抽象),和一个实现该接口的Adapter(适配器)类来透明地调用外部组件。这样替换外部组件时,最多只要修改几个Adapter类就可以了,其他源代码都不会受到影响。 还是以手机为例子,每一种机型都自带有从电器,有一天自带充电器坏了,而且市场没有这类型充电器可买了,怎么办?万能充电器就可以解决,这个万能充电器就是适配器。 适配器模式有两种形式,一种是类的适配,另一种自然就是对象的适配。1.1 类的适配 这... 阅读全文
posted @ 2013-11-23 23:03 Scott007 阅读(4321) 评论(0) 推荐(0) 编辑
摘要: 1 概述 装饰模式(Decorator),就是可以动态的给对象增加新的功能,它要求装饰者对象和被装饰者对象有着相同的抽象父类或者接口。 当然,也可以写一个新的类来继承旧的类,在新的类中增加方法或者重写父类中的方法以此来达到扩展功能的目的,但是这样做的话,依然在编译的时候就定死了这个新的子类及其对象。想要动态的达到这一目的,就得使用这个模式了。 装饰者模式有以下几个要点(来自HeadFirst):(1)装饰者和被装饰者有着相同的超类型(2)可以使用多个装饰者来装饰一个对象(3)对象可以在任何时候被装饰,动态的(4)在该模式的使用过程中,也会用到继承,但是继承的目的不是为了获得行为,而是让装... 阅读全文
posted @ 2013-11-23 12:41 Scott007 阅读(2076) 评论(3) 推荐(0) 编辑
摘要: 1 概述原型模式(Prototype model)被用在频繁调用且极其相似的对象上,在已指定对象的基础上,然后通过拷贝这些原型对象创建新的对象。 Prototype类需要具备以下两个条件:(1)实现Cloneable接口。在Java语言有一个Cloneable接口,它的目的是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。(2)重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中有一个clone方法,作用是返回对象的一 阅读全文
posted @ 2013-11-21 22:15 Scott007 阅读(1171) 评论(1) 推荐(1) 编辑
摘要: 1 概述 建造者模式(Builder Pattern)主要用于“分步骤构建一个复杂的对象”,在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。因此, 建造者模式主要用来解决“对象部分”的需求变化。 这样可以对对象构造的过程进行更加精细的控制。2 示例 还是以生产手机为例,每个手机分为屏幕Screen、CPU、Battery。现在要生产两种手机,苹果机和三星。苹果: 1 package org.scott.builder.before.use; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 /** .. 阅读全文
posted @ 2013-11-20 22:26 Scott007 阅读(402) 评论(0) 推荐(0) 编辑
摘要: 1 概述 单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:(1)某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。(2)省去了new操作符,降低了系统内存的使用频率,减轻GC压力。(3)有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。2 详解 单例模式常用的写法有如下这么两种。2.1 饿汉式 如果应用程序总是创建并使用单例模式,或者在创建和运行时压力不是很大的情况下,可以使用一个私有静态变量,提前把对象创建好。 1 package org.sc. 阅读全文
posted @ 2013-11-16 10:13 Scott007 阅读(452) 评论(0) 推荐(0) 编辑
摘要: 1 概述 关于设计模式的内容等在网上有很多,但是没有自己实际的搞一把,多少对这些个东西还是有点模糊,今儿个从工厂模式开始,学习学习这23个由大牛们总结出来的设计模式,若有理解不到位的地方,还请多多指正。 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 有人把工厂模式分为三类: 1)简单工厂模式(Simple Factory):不利于产生系列产品,只能生成单个产品。 2)工厂方法模式(Factory Method):可以生产多个产品。 3)抽象工厂模式(Abstract Factory):生产产品族,但不利于产生新的产品。 这三种... 阅读全文
posted @ 2013-11-14 21:31 Scott007 阅读(599) 评论(2) 推荐(0) 编辑
摘要: 近期开始搞搞web的东西,觉得有必要把遇到的问题总结一下,就在这里当做个笔记本吧。1.用maven建立的web工程,在运行的时候,右键找不到“Run on server”菜单:可以在命令提示行中,切换到项目的根目录,输入如下命令:即:mvn eclipse:eclipse -Dwtpversion=1.0刷新下eclipse work space,就出现了Run as on server了:2.关于div的垂直居中CSS中的确是有vertical-align属性,但是它只对(X)HTML元素中拥有valign特性的元素才生效,例如表格元素中的、、等,而像、这样的元素是没有valign特性的.. 阅读全文
posted @ 2013-10-11 20:05 Scott007 阅读(1622) 评论(0) 推荐(0) 编辑
摘要: Storm框架入门1 Topology构成 和同样是计算框架的Mapreduce相比,Mapreduce集群上运行的是Job,而Storm集群上运行的是Topology。但是Job在运行结束之后会自行结束,Topology却只能被手动的kill掉,否则会一直运行下去。 Storm集群中有两种节点,一种是控制节点(Nimbus节点),另一种是工作节点(Supervisor节点)。所有Topology任务的提交必须在Storm客户端节点上进行(需要配置~/.storm/storm.yaml文件),由Nimbus节点分配给其他Supervisor节点进行处理。Nimbus节点首先将提交的Topolo 阅读全文
posted @ 2013-09-14 11:00 Scott007 阅读(2156) 评论(0) 推荐(2) 编辑