设计模式
文章平均质量分 75
SKTT1丶faker
好好学习,天天向上
展开
-
代理模式(Proxy Pattern)
远程代理远程代理好比”远程对象的本地代表”。远程对象是一种对象,活在JVM堆中,本地代表是一种可以由本地方法调用的对象,其行为会转发到远程对象中。客户对象调用本地堆中的代理对象上的方法,再由代理处理所有网络通信的低层细节。当调用完毕,结果值也通过网络从远程送回我们的客户。可以利用RMI实现远程调用。远程方法远程方法包括四个对象:客户对象、客户辅助对象(代理)、服务辅助对象、服务...原创 2018-08-14 23:03:31 · 225 阅读 · 0 评论 -
状态模式(State Pattern)
什么是状态模式一个糖果机的状态转换图如下所示: 如图,糖果机共有四种状态:有硬币、没硬币、售出糖果、糖果售罄,可以用四个常亮来表示四种状态,在糖果机类里定义投硬币、退硬币、转动曲柄、发糖果这四个动作的方法,这样,每个方法都要写与状态有关的if语句,确定在某个状态下某个动作的结果,但是这样的话,扩展起来很不方便,代码可维护性也低。可以定义一个状态接口,用四种状态类实现它,每个类实现需要的方...原创 2018-08-13 23:06:49 · 539 阅读 · 0 评论 -
迭代器模式(Iterator Pattern)与组合模式(Composite Pattern)
什么是迭代器模式正式定义迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露其内部的表示。 把游走的任务放在迭代器上,而不是聚合上,这样简化了聚合的接口和实现,也让责任各得其所。一个迭代器模式的结构一个聚合对象的接口,该接口中包含创建迭代器的方法,具体的聚合类实现该接口的创建迭代器方法,并返回一个迭代器对象;一个迭代器接口,包含next、hasNe...原创 2018-08-13 18:36:06 · 265 阅读 · 0 评论 -
设计模式总结
设计模式的定义模式是在某情境下,针对某问题的某种解决方案。设计模式分类分类图如下: 设计原则找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。针对接口(超类型,可以是抽象类也可以是接口)编程,而不是针对实现编程。 多用组合,少用继承。(多用has-a,少用is-a)为了交互对象之间的松耦合而努力。类应该对扩展开放,对修改关闭。要依...原创 2018-08-15 23:17:44 · 147 阅读 · 0 评论 -
复合模式(Compound Pattern)
什么是复合模式模式通常被一起使用,并被组合在同一个设计解决方案中。复合模式在一个解决方案中结合两个或多个模式,已解决一般或重复发生的问题。模式合作在实际工作中,可以采用不同的设计模式解决各种问题,下面是一个例子:首先要创建一群呱呱叫的鸭子类,让他们实现接口Quackable:public interface Quackable { public void qua...原创 2018-08-15 21:56:16 · 2388 阅读 · 0 评论 -
模板方法模式(Template Method Pattern)
什么是模板方法模式正式定义模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。一个模板方法的实现:一个咖啡因饮料的准备方法: final void prepareRecipe(){ ...原创 2018-08-13 00:02:18 · 100 阅读 · 0 评论 -
装饰者(Decorator)模式
装饰者模式的说明装饰者模式动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的设计方案。装饰者模式的特点装饰者和被装饰对象有相同的超类型;可以用一个或多个装饰者包装一个对象;在任何需要原始对象(被包装对象)的场合,可以用装饰过的对象代替它;装饰者可以在所委托被装饰者的行为之前与之后,加上自己的行为,以达到特定的目的;对象可以在任何时候被装饰,所以可以在运行...原创 2018-08-08 03:13:48 · 156 阅读 · 0 评论 -
适配器模式(Adapter Pattern)和外观模式(Facade Pattern)
什么是适配器现实中的适配器是把作为两个无法适配的设备之前的桥梁,把一个设备转化成另一个设备可以使用的设备,类似的,假设已有一个软件系统,你希望它能和一个新的厂商类库搭配使用,但是这个新厂商所设计出来的接口,不同于旧厂商的接口,如果不希望改变代码,就可以写一个适配器类,将新厂商接口转接成你所希望的接口。适配器的正式定义 适配器模式是将一个类的接口,转换成客户期望的另一个接口,适配器让...原创 2018-08-12 21:15:31 · 287 阅读 · 0 评论 -
命令模式(Command Pattern)
命令模式概念命令模式图解说明类似于在餐馆点餐的过程,顾客类似于客户,他首先将菜单写好,发出命令对象(菜单),服务员(调用者)拿到菜单后将订单交给厨师(执行者),厨师执行的是订单中的内容,而与服务员是无关的。正式定义命令模式将请求封装成对象,以便使用不同的请求、队列或日志来参数化其他对象,命令模式也支持可撤销的操作。一个简单命令模式的实现(遥控器控制点灯开关)...原创 2018-08-12 17:00:09 · 172 阅读 · 0 评论 -
观察者(Observer)模式
一、认识观察者模式类似于报纸订阅的过程: - 报社的任务就是出版报纸; - 向报社订阅报纸后,只要有新报纸出版,就会给客户送来。只要是客户,就会一直收到新报纸; - 当客户不想看报纸的时候,取消订阅,报社就不会送报纸过来; - 只要报社还在运营,就会有人向他们订阅报纸或取消订阅。将出版者改称为主题(Subject),订阅者称为观察者(Observer),则观察者模式具有以下特点:...原创 2018-08-08 00:22:27 · 169 阅读 · 0 评论 -
单件模式(Singleton Pattern)
为什么引入单件模式有些对象只需要一个,例如线程池、缓存、对话框、处理偏好设置和注册表的对象、日志对象、打印机和显卡等设备的驱动对象,这些对象只能有一个实例,如果有多个就会出现问题。如果用全局变量,那么必须在程序一开始就创建好对象,非常耗费资源,可以用单件模式,在需要时创建对象。单价模式的关键是保证一个对象只被实例化一次。单件模式分析下面是一个经典的单件模式类的实现:publ...原创 2018-08-12 02:25:12 · 113 阅读 · 0 评论 -
工厂(Factory)模式
为什么引入工厂模式按照面向对象的思想,利用接口(或抽象类)实例化一群具体的相关类时,要调用new方法,在运行时根据条件决定实例化的是哪一个类,这样的话,一旦有变化或扩展,就必须重新打开这段代码进行修改(例如有新的类型要实例化),相当于将很多鸡蛋放在一个篮子里,造成维护的困难。 这是一个相似的例子(假设这些类都实现了接口Book):Book book;if(comic) bo...原创 2018-08-12 01:36:24 · 250 阅读 · 0 评论 -
OutOfMemoryError异常
在虚拟机规范中,除了程序计数器,其他区域都有OutOfMemoryError异常的能,下面就实践一下这些异常。Java堆溢出Java堆用于存储对象实例,只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除对象,那么在对象数量达到最大堆的容量限制后就会产生内存溢出异常。这是一个堆内存溢出的例子:package outofmemoryerror;...原创 2018-08-17 01:50:06 · 151 阅读 · 0 评论