随笔分类 -  设计模式

摘要:享元模式的定义为:采用一个共享类来避免大量拥有相同内容的“小类”的开销。由此看来享元模式的主要的目的还是节省资源,主要是内存资源,感觉有点像单例。享元模式的组成部分:1)抽象享元角色:为具体享元角色规定了必须实现的方法,而外蕴状态就是以参数的形式通过此方法传入。在Java中可以由抽象类、接口来担当。2)具体享元角色:实现抽象角色规定的方法。如果存在内蕴状态,就负责为内蕴状态提供存储空间。3)享元工厂角色:负责创建和管理享元角色。要想达到共享的目的,这个角色的实现是关键!4)客户端角色:维护对所有享元对象的引用,而且还需要存储对应的外蕴状态。例子如下: 1 package com.cnblogs 阅读全文
posted @ 2012-09-17 12:26 iPolaris 阅读(205) 评论(0) 推荐(0)
摘要:观察者模式定义了一种一对多的的依赖,当被监听者发生改变或被观察者需要通知订阅者(或观察者)时,观察者会收到通知。观察者模式有以下几部分组成。1)抽象目标角色(Subject):目标角色知道它的观察者,可以有任意多个观察者观察同一个目标。并且提供注册和删除观察者对象的接口。目标角色往往由抽象类或者接口来实现。2)抽象观察者角色(Observer):为那些在目标发生改变时需要获得通知的对象定义一个更新接口。抽象观察者角色主要由抽象类或者接口来实现。3)具体目标角色(Concrete Subject):将有关状态存入各个Concrete Observer对象。当它的状态发生改变时,向它的各个观察者发 阅读全文
posted @ 2012-09-16 19:42 iPolaris 阅读(186) 评论(0) 推荐(0)
摘要:策略模式主要定义一些列的算法,把这些算法封装成偶共同接口的单独的类,并且使他们之间可以互换。策略模式主要有下面几部分组成:1)算法使用环境(Context)角色:算法被引用到这里和一些其它的与环境有关的操作一起来完成任务。2)抽象策略(Strategy)角色:规定了所有具体策略角色所需的接口。在java它通常由接口或者抽象类来实现。3)具体策略(Concrete Strategy)角色:实现了抽象策略角色定义的接口。例子演示:以普通会员和VIP会员享受的折扣为例 1 package com.cnblogs.ipolaris.Strategy.test; 2 /** 3 * 定义抽象策略角色 . 阅读全文
posted @ 2012-09-15 22:32 iPolaris 阅读(154) 评论(0) 推荐(0)
摘要:装饰器模式又叫包装器模式,用于动态的给一个对象增加一些额外的职能,取代一些情况下的继承的使用,增加灵活性。 装饰器模式主要有一下部分组成: 1)抽象构件角色(Component):定义一个抽象接口,以规范准备接收附加责任的对象。 2)具体构件角色(Concrete Component):这是被装饰者,定义一个将要被装饰增加功能的类。 3)装饰角色(Decorator):持有一个构件对象的实例,并定义了抽象构件定义的接口。 4)具体装饰角色(Concrete Decorator):负责给构件添加增加的功能。 应用的场景类似于:你的电脑内存只有2G,但是你想有一台内存是4G的电脑,你是... 阅读全文
posted @ 2012-09-13 23:23 iPolaris 阅读(175) 评论(0) 推荐(0)
摘要:适配器在生活中是一种很常见的一种东西,在国内买个手机欧版手机,充电器的插头和国内的插座不匹配,商家会为你提供一个转接头来适配,方能正常使用。中间的转接口就可看做是适配器。适配器模式就是类似的一个过程。充电器是说明适配器模式的一个常用的例子,在此我也来借鉴一下。将欧式插头转到中式 1 package com.cnblogs.ipolaris.adapter.test; 2 3 public class CPlug { 4 public String adapterSocket(){ 5 System. out .println("我是中式插头" );... 阅读全文
posted @ 2012-09-12 00:09 iPolaris 阅读(251) 评论(0) 推荐(0)
摘要:单例模式是一种简单但应用相当广泛的设计模式,保证一个类只生成一个实例,提供一个全局的接口来访问。单例模式主要有两种实现方式:饿汉式和懒汉式饿汉式形如: 1 package com.cnblogs.ipolaris.test; 2 3 public class SingleInstance { 4 private static SingleInstance instance = new SingleInstance(); 5 private SingleInstance(){ 6 7 } 8 public static SingleInst... 阅读全文
posted @ 2012-09-04 11:01 iPolaris 阅读(139) 评论(0) 推荐(0)
摘要:简单工厂模式的主要解决了产品的扩展问题,而抽象工厂模式主要解决的是产品系列的问题,按照我的理解是:简单工厂模式更倾向于获取单个简单的产品,如生产一个苹果,生产一个桔子。而抽象工厂模式倾向于解决稍微复杂的一些问题,比如,我要获取一个菜单,菜单的内容有:荤菜和酒(假设每个菜单都只有这两种选择,菜单可看做是一个系列),这是我们就需要抽象工厂模式。下面我们用一个水果和肉的组合来简单的说明一下抽象设计模式。1 package com.cnblogs.ipolaris.abstractfac.test;2 /**3 * 所有水果的父类4 * @author iPolaris5 *6 */7 p... 阅读全文
posted @ 2012-09-03 18:01 iPolaris 阅读(230) 评论(0) 推荐(0)
摘要:在《设计模式》一书中,工厂模式叫做工厂方法模式,定义为:定义创建对象的接口,让子类决定实例化哪一个类,工厂方法使得一个类的实例化延迟到其子类。使用工厂模式的情形主要有一下几种情况:编译时无法准确预期要创建的对象的类类想让其子类决定在运行时创建什么简单的说,有时你会通过很多if……else来判断类生成哪种类型的对象(大多指有相同父类的子类)比如下面的一个方法:public Fruit getfruit(String type){Fruit fruit = null;if(type.equals("orange")){fruit = new Orange();}else if( 阅读全文
posted @ 2012-08-27 10:39 iPolaris 阅读(170) 评论(0) 推荐(0)
摘要:原型模式应用的条件为:创建给定类的实例过程比较复杂,或比较耗时耗资源。因而原型模型主要的目的是为了提高创建对象的效率,隐藏了复杂的创建过程。原型模式还涉及到一个浅复制和深复制的问题,这问题在objective-c更常被提到,java中的说法应该是引用。浅复制只获取了复制对象的指针,与复制对象共享资源,深复制则是获取一个真正地副本对象,享有自己独立的资源。下面是一个小例子,例子中的情况并非需要原型设计模式,只是为了说明一下原型模式的用法。 首先创建了一个Person类,需要实现Cloneable接口复写clone()方法package com.cnblogs.ipolaris.test; ... 阅读全文
posted @ 2012-08-26 23:58 iPolaris 阅读(190) 评论(0) 推荐(0)