摘要:责任链模式A.定义:使多个对象都有机会处理请求,避免了请求发送者和接收者之间的耦合关系。将对象组成一个链,并连着这个链传递该请求,直到有一个对象处理该请求。B.定义分析:"使多个对象都有机会处理请求,避免了请求发送者和接收者之间的耦合关系。将对象组成一个链,并连着这个链传递该请求,直到有一个对象处理该请求。"多个对象都有一致的请求处理接口,(请求可以理解为调用,并传参),让每个对象都有处理请求的机会。"使多个对象都有机会处理请求,避免了请求发送者和接收者之间的耦合关系。将对象组成一个链,并连着这个链传递该请求,直到有一个对象处理该请求。"这样,请求的发送
阅读全文
摘要:访问者模式A.定义:表示一个作用于某对象结构中各元素的操作。它使你可以在不改变对象类的前提下定义作用于这些元素的新操作。B.定义分析:"表示一个作用于某对象结构中各元素的操作。它使你可以在不改变对象类的前提下定义作用于这些元素的新操作。" 对象结构,即一个对象,这个对象中包含了一些数据,对应这些数据会有一些操作接口,get、set之类的。"表示一个作用于某对象结构中各元素的操作。它使你可以在不改变对象类的前提下定义作用于这些元素的新操作。" 原本这些操作应该聚合到类中的,但是某种情况下(当你觉得不适当或者不舒服的时候),需要把这些操作接口提到外部类,这就
阅读全文
摘要:叠代器模式A.定义:提供一种方法顺序访问一个聚合对象中的各个元素,又不暴露其内部表示。B.定义分析:"提供一种方法顺序访问一个聚合对象中的各个元素,又不暴露其内部表示。"叠代器模式提供了一个访问聚合对象中各个元素的方法,这个方法不会暴露该对象的内部表示。C.文体:(1)这种方法是什么?把遍历接口独立到叠代器对象中,而不是聚合在对象中。
阅读全文
摘要:中介者模式A.定义:用一个中介对象封装一些列对象的交互,中介者模式使各对象不需要显示的相互引用,从而使耦合松散,而且可以独立地改变他们之间的交互。B.定义分析:"用一个中介对象封装一些列对象的交互,中介者模式使各对象不需要显示的相互引用,从而使耦合松散,而且可以独立地改变他们之间的交互。" 面向对象系统的优点之一是只要保证对象的接口稳定,就一定程度上保证了系统的稳定。但是对象间显示交互使整个面向对象系统不能被复用,系统变的不灵活。可以用一个中介对象封装这些显示交互。"用一个中介对象封装一些列对象的交互,中介者模式使各对象不需要显示的相互引用,从而使耦合松散,而且可
阅读全文
摘要:备忘录模式A.定义:在不破坏封装性的前提下,捕获一个对象内部状态,并在对象外部保存下来,这样以后就可将对象恢复到以前保存的状态。B.定义分析:"在不破坏封装性的前提下,捕获一个对象内部状态,并在对象外部保存下来,这样以后就可将对象恢复到以前保存的状态。" 封装性指的是对象不应该向外界暴露的接口和数据就不要向外界公开。"在不破坏封装性的前提下,捕获一个对象内部状态,并在对象外部保存下来,这样以后就可将对象恢复到以前保存的状态。"获取一个对象的内部状态,在外部保存下来。"在不破坏封装性的前提下,捕获一个对象内部状态,并在对象外部保存下来,这样以后就
阅读全文
摘要:命令模式A.定义:将一个请求封装成对象,这样可以用不同的请求对客户进行参数化。对请求排队、记录请求日志,或支持可撤销的操作。B.定义分析:"将一个请求封装成对象,这样可以用不同的请求对客户进行参数化。对请求排队、记录请求日志,或支持可撤销的操作。" 请求可以理解为调用。把调用封装在一个对象里。为什么要把请求封装在对象里呢?假设有个我们设计GUI,有个Menu和Button,设计GUI toolkit的时候,是没有办法知道Menu动作要处理哪些事情的,我们之后留出这样的机制:固定调用一个对象的action接口,或者调用回调函数(面向过程).如果是面向对象情况下,就固定调用对象
阅读全文
摘要:解释器模式A.定义:给定一个语言,定义其文法的一种表示;定义一个解释器,使用该表示解释语言中的句子.B.定义分析:"给定一个语言,定义其文法的一种表示;定义一个解释器,使用该表示解释语言中的句子."有范式表示一个语言(编译器相关知识了解即可)."给定一个语言,定义其文法的一种表示;定义一个解释器,使用该表示解释语言中的句子."定义一个解释器,利用上边的范式,解释语言中的句子。C.问题:(1)使用动机?因为设计模式,其实给定的是一个解决思路。解释器模式要解决的问题是:特定类型的问题发生频率足够高,可能把该问题的各个实例表述为简单语言中的句子,这样就可以构建
阅读全文
摘要:模板方法模式A.定义:定义一个操作的算法的骨架,把某些操作步骤推迟到子类中。模板方法模式使子类在不改变算法结构的情况下,重新定义该算法的某些步骤。B.定义分析:"定义一个操作的算法的骨架,把某些操作步骤推迟到子类中。模板方法模式使子类在不改变算法结构的情况下,重新定义该算法的某些步骤。"算法的骨架指的是算法的关键步骤,我们把算法的关键步骤定义成虚接口。"定义一个操作的算法的骨架,把某些操作步骤推迟到子类中。模板方法模式使子类在不改变算法结构的情况下,重新定义该算法的某些步骤。"子类如果重载了这些虚接口,就会使算法的相应步骤被重写,这样子类就有机会(hoo
阅读全文
摘要:状态模式A.定义:当对象的状态改变时候改变他的行为,就像改变了他的类一样。B.定义分析:"当对象的状态改变时候改变他的行为,就像改变了他的类一样。"对象的状态,比如:开始、停止、暂停状态。当对象的状态改变时候,比如由开始状态变成暂停状态,开始状态时候,调用对象的pause接口,会变成暂停状态,但是在暂停状态时候,调用对象的pause接口,不会有任何反应。"当对象的状态改变时候改变他的行为,就像改变了他的类一样。"对象的行为随着状态改变,确实就和类被改变了一样。C.问题:(1)怎么实现?具体实现比较简单,抽象一个状态对象,客户面对这个状态对象,聚合它。抽象
阅读全文
摘要:观察者模式A.定义:定义对象间一种一对多的依赖关系,当对象变化时,其他对象能够得到通知,并自动更新。B.定义分析:"定义对象间一种一对多的依赖关系,当对象变化时,其他对象能够得到通知,并自动更新。"多个对象关注一个对象的状态,比如一个数据来源。"定义对象间一种一对多的依赖关系,当对象变化时,其他对象能够得到通知,并自动更新。"被关注的对象变化时,有种办法能通知其他关注对象。"定义对象间一种一对多的依赖关系,当对象变化时,其他对象能够得到通知,并自动更新。"通知关注对象的时候,实际上可行的一个方法是调用一个定义好的更新接口。C.问题:(
阅读全文
摘要:策略模式A.定义:定义一系列算法,并把他们一个个封装起来,使他们能够相互替换。使算法能够独立于客户而变化。B.定义分析:"定义一系列算法,并把他们一个个封装起来,使他们能够相互替换。使算法能够独立于客户而变化。"完成相同功能的算法."定义一系列算法,并把他们一个个封装起来,使他们能够相互替换。使算法能够独立于客户而变化。"不同的算法,封装在不同的类里。"定义一系列算法,并把他们一个个封装起来,使他们能够相互替换。使算法能够独立于客户而变化。"封装不同算法的类,完成相同功能的接口应该是一样的,且要集成自同一个基类,这样他们就能够无缝替换
阅读全文
摘要:轻量模式A.定义:运用共享技术有效地支持大量细粒度对象。B.定义分析:“运用共享技术有效地支持大量细粒度对象”.比如,一段文字,一幅图片,一个颜色,所有用到的地方,都使用同一个对象,而不是每次都new出一个新的实例。“运用共享技术有效地支持大量细粒度对象”.比如,一个文档编辑器,里边的字符,图形,标点等等,如果每个单一的元素都用一个对象实例的话,那对象数量就会很多很多。C.问题:(1)共享技术怎么有效地支持大量细粒度的对象?建立一个共享对象池,所有的实例请求都经过共享池的接口,这样就达到了共享对象的目的。需要注意的是,为了是共享实例能够多个地方使用,需要区分对象的内部状态和外部状态,内部状态不
阅读全文
摘要:代理模式A.定义:为其他对象提供一种代理,以控制对这个对象的访问。B.定义分析:"为其他对象提供一种代理,以控制对这个对象的访问。"代理的意思就是:访问目标的中间对象,也就是我们不直接访问目标,而是通过一个中间对象访问目标对象,这个中间对象就是代理。"为其他对象提供一种代理,以控制对这个对象的访问。"不直接访问需要的对象,而是访问代理对象,代理对象完成被代理的目标对象的功能。那为什么要用代理呢?当我们希望访问目标对象时候,我们被通知,或者期间我们需要控制一些东西...当目标对象不在同一个地址空间,而我们要希望没有区别的访问的时候...当目标对象很大,加载
阅读全文
摘要:组合模式A.定义:把对象组织成树形结构以表示“整体-部分”关系。组合模式使单个对象和组合对象在使用上没有区别。B.定义分析:"把对象组织成树形结构以表示“整体-部分”关系。组合模式使单个对象和组合对象在使用上没有区别。"整体部分关系,比如:Window这个对象,其中可以包括Button,List,Menu等组件,Window就是个整体,Button,List,Menu等就是组成部分."把对象组织成树形结构以表示“整体-部分”关系。组合模式使单个对象和组合对象在使用上没有区别。"如果上边的Window里包含了List,同时也包含了另一个Window对象,里
阅读全文
摘要:装饰者模式A.定义:动态地给一个对象添加一些职责。就增加功能而言,装饰者模式比生成子类更灵活。B.定义分析:"动态地给一个对象添加一些职责。就增加功能而言,装饰者模式比生成子类更灵活。"我们知道,对象的职责定义在类中,类的方法决定了对象的职责."动态地给一个对象添加一些职责。就增加功能而言,装饰者模式比生成子类更灵活。"装饰者模式的意图是不修改类,而是动态给对象添加职责."动态地给一个对象添加一些职责。就增加功能而言,装饰者模式比生成子类更灵活。"装饰者不修改类,而是动态给对象加,当然灵活.C.问题:(1)怎么实现?假设有类A和Sub
阅读全文
摘要:桥接模式A.定义:将抽象部分和它的实现部分分离,使他们可以独立的变化.B.定义分析:"将抽象部分和它的实现部分分离,使他们可以独立的变化."抽象部分,比如我们写一个gui tookit,里边有个Window类,这个类代表了窗口,提供了窗口的功能接口如:close、open、resize、moveto等等.基类的接口,我们可以理解为抽象部分."将抽象部分和它的实现部分分离,使他们可以独立的变化."实现部分,上边说抽象部分是Window类,实现Window的功能:我们有方法法a:直接在Window类的定义中,绘制Window的轮廓、外形、标题栏、滚动条等等,
阅读全文
摘要:适配器模式A.定义:将一个类的接口装换成客户希望的另一个接口,适配器模式使原来不能一起工作的类可以一起工作.B.定义分析:"将一个类的接口装换成客户希望的另一个接口,适配器模式使原来不能一起工作的类可以一起工作."一个已有类,有一些接口,完成一些功能.假设类A"将一个类的接口装换成客户希望的另一个接口,适配器模式使原来不能一起工作的类可以一起工作."把这些已有的接口通过封装,能够融合进已有的类体系,也就是从已有类继承出一个类B,这个类封装了A的功能,同时适应了已有接口."将一个类的接口装换成客户希望的另一个接口,适配器模式使原来不能一起工作的类
阅读全文
摘要:原型模式A.定义:用原型实例指定创建对象的种类,通过拷贝原型实例创建新的对象.B.定义分析:"用原型实例指定创建对象的种类,通过拷贝原型实例创建新的对象."原型实例指的是一个类的实例,对于我们要创建的对象来说,称之为原型."用原型实例指定创建对象的种类,通过拷贝原型实例创建新的对象."我们将要创建的对象,和原型实例是一类的,也就是一个类."用原型实例指定创建对象的种类,通过拷贝原型实例创建新的对象."我们创建新对象的时候,不用自己new,只需要原型类提供的clone方法创建新的实例即可.这个模式很容以就想到了,而且是需要的时候就会想到
阅读全文
摘要:创建者模式A.定义:将一个复杂对象的创建过程和表示分离,使相同的创建过程可以构造不同的表示.B.定义分析:"将一个复杂对象的创建过程和表示分离,使相同的创建过程可以构造不同的表示."我们假设一个对象很复杂,组成部分很多分别为PA,PB,PC,PD."将一个复杂对象的创建过程和表示分离,使相同的创建过程可以构造不同的表示."我们建设创建接口分别为BuildPA, BuildPB, BuildPC,BuildPD,且每个部分都有多种原料选择.我们说的原料比如颜色,就是“表示”.创建过程就是BuildPx的接口一次调用,这个过程永远不变.创建者模式就是让这不变
阅读全文
摘要:抽象工厂模式A.定义:提供一个创建一系列相关或相互依赖的对象的接口,而无需指定他们具体的类.B.定义分析:"提供创建一系列相关或相互依赖的对象的接口,而无需指定他们具体的类."类似简单工厂和工厂方法,要定义一个类,提供接口,但是是多个."提供创建一系列相关或相互依赖的对象的接口,而无需指定他们具体的类."这个接口象简单工厂的接口一样,创建对象,但是有个约束:这些对象是相关的或者相互依赖的;"提供创建一系列相关或相互依赖的对象的接口,而无需指定他们具体的类."这句话的意思可能是:因为抽象工厂派生类已经约束了种类,这里无须指定.C.问题(
阅读全文