摘要: 迭代器模式 提供一种方法顺序的访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 把在元素之间游走的责任交给迭代器,而不是聚合对象。类图:1、迭代器接口Iterator 定义了遍历集合的方法。2、具体迭代器ConcreteIterator 负责管理目前遍历的位置。3、具体聚合类ConcreteAggregate 持有一个对象的集合,负责实例化一个具体迭代器。设计原则:9、单一责任,一个类应该只有一个引起变化的原因当一个模块或一个类被设计成只支持一组相关功能,我们说它具有高内聚。(转载请注明出处 ^.^) 阅读全文
posted @ 2013-03-29 17:08 windlaughing 阅读(385) 评论(0) 推荐(0) 编辑
摘要: 模板方法模式“封装算法” 在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中。 模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。模板就是一个方法,将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。模板一般不是完整的,有部分实现在子类中类图:1、该抽象类中包含一个模板方法,模板方法在实现算法过程中,用到了下面两个原语操作(可以为具体的,也可以为抽象方法)2、可能有多个具体类,每个都实现了模板方法所需要的全部操作。3、当创建一个模板方法时,如果子类“必须”提供算法中某个方法的实现是,就使用抽象方法。4、如果算法的这个部分是可选的,就用钩子。对于.. 阅读全文
posted @ 2013-03-29 17:06 windlaughing 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 外观模式 提供了一个统一的接口,用来访问子系统的一群接口。外观定义了一个高层接口,让子系统更容易使用。类图:设计原则:7、最少知识原则:只和你的密友谈话在设计中,不要让太多的类耦合在一起例如:public float getTemperature(){ return station.getThermometer().getTemperature();//依赖了三个类}应该采用以下方案:public float getTemperature(){ return station.getTemperature();//依赖了两个类,需要向station中添加getTemperature()方法... 阅读全文
posted @ 2013-03-29 17:03 windlaughing 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 适配器模式 将一个类的接口,转换成客户希望的另一个接口。适配器让原本接口不兼容的类可以合作无间。类图:(转载请注明出处 ^.^) 阅读全文
posted @ 2013-03-29 17:01 windlaughing 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 命令模式 将“请求”封装成对象,以便使用不同的请求、队列或日志来参数化其他对象。命令模式也支持撤销的操作。 encapsulates a request as an object, thereby letting you parameterize other objects with different request, queue or log requests, and support undoable operations.一个封装的请求:1、封装的请求:命令模式将动作和接收者包进对象中。2、从外面看,其他对象不知道哪个接收者进行了哪些动作,只知道调用了execute() 方法,请求.. 阅读全文
posted @ 2013-03-29 16:59 windlaughing 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 单例模式 确保一个类只有一个实例,并提供一个全局访问点。往往用单个实例管理共享的资源,如数据库连接和线程池。经典的单例模式实现:public class Singleton{ private static Singleton uniqueInstance; //静态的变量来记录Singleton类的唯一实例 private Singleton(){} //私有构造器,只有类内部可以调用 public static Singleton getInstance(){//静态方法,返回实例 if( uniqueInstance==null ) uniqueInstan... 阅读全文
posted @ 2013-03-29 16:56 windlaughing 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 抽象工厂模式 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。抽象工厂模式类图:1、Client : 客户的代码中只涉及抽象工厂,运行时使用具体的工厂实例。2、AbstrackFactory : 抽象工厂,定义了一组创建产品的方法。3、ConcreteFactory1ConcreteFactory2: 具体工厂生产不同的产品家族。4、AbstractProductAAbstractProductB : 产品家族,每个具体工厂只能生产一组产品。工厂方法模式、抽象工厂模式对比共同: 1、都是用来封装对象的创建 2、通过减少应用程序和具体类之间的依赖,促进松耦合不同: 工... 阅读全文
posted @ 2013-03-29 16:53 windlaughing 阅读(353) 评论(0) 推荐(0) 编辑
摘要: 工厂方法模式 定义了一个创建对象的接口,但是由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。使用new时,是针对实现编程,依赖具体类工厂方法模式将产品的“实现”从“使用”中解耦“工厂”封装实例化的行为设计原则6、要依赖抽象,不要依赖具体类工厂方法类图:1、PizzaStore类实现操纵产品的方法,但不实现工厂方法,由子类实现。public abstract class PizzaStore {abstract Pizza createPizza(String item);//工厂方法为抽象方法 public Pizza orderPizza(String type) { Pi. 阅读全文
posted @ 2013-03-29 16:50 windlaughing 阅读(366) 评论(0) 推荐(0) 编辑
摘要: 装饰者模式: 动态的将责任附加到对象上。想要扩展功能,装饰者提供了有别于继承的另外一种选择。设计原则:5、对扩展开放,对修改关闭。示例类图:以《Head First Design Patterns》中的咖啡为例。有双摩卡、豆浆、奶泡的House Blend咖啡,价格计算:Java JDK中的装饰者模式:(转载请注明出处 ^.^) 阅读全文
posted @ 2013-03-29 16:46 windlaughing 阅读(366) 评论(0) 推荐(0) 编辑
摘要: 观察者模式:在对象之间定义一对多的依赖。这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。设计原则:4、为交互对象之间的松耦合设计而努力。示例类图:以《Head First Design Patterns》中气象站为例。1、所有依赖主题的观察者都应该实现Observer接口,这样主题状态信息发生改变,需要通知观察者时,就有了一个共同的接口。2、可以使用推(push)或拉(pull)的方式传送数据。通过update接口传入主题的引用;在Observer对象构造时,通过构造函数传入主题引用;把主题的信息以参数的形式直接通过update接口传入;(转载请注明出处 ^.^) 阅读全文
posted @ 2013-03-29 16:42 windlaughing 阅读(437) 评论(0) 推荐(0) 编辑