发表于: 2017-09-27 23:44:47

1 673


【今日完成】

今天学习了《Head First 设计模式》

主要学习了三种模式:


1、策略模式 

策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。下面就以一个示意性的实现讲解策略模式实例的结构。


 这个模式涉及到三个角色:

  ●  环境(Context)角色:持有一个Strategy的引用。

  ●  抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。

  ●  具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。




2、观察者模式

观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。

  • Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。

  • ConcreteSubject:具体主题(具体被观察者),该角色将有关状态存入具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发送通知。

  • Observer:抽象观察者,是观察者者的抽象类,它定义了一个更新接口,使得在得到主题更改通知时更新自己。

  • ConcrereObserver:具体观察者,是实现抽象观察者定义的更新接口,以便在得到主题更改通知时更新自身的状态。



3、装饰模式

装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。


    动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。不改变接口的前提下,增强所考虑的类的性能。

何时使用:

    1)需要扩展一个类的功能,或给一个类增加附加责任。

    2)需要动态的给一个对象增加功能,这些功能可以再动态地撤销。

    3)需要增加一些基本功能的排列组合而产生的非常大量的功能,从而使继承变得不现实。


角色组成:

    l 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。

    l 具体构件(ConcreteComponent)角色:定义一个将要接收附加责任的类

    l 装饰角色(Decorator):持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口

    l 具体装饰角色(ConcreteDecorator):负责给构件对象“贴上”附加的责任



其实装饰模式在I/O里就用的比较多。

当时看I/O的时候,总是发现要在原本基础的类上套一个类,比如buffer后缀的。跟小管子套大管子一样,这就是一种典型的装饰模式。套上装饰类,增强了功能。



【今日收获】

学习了设计模式的基础知识,虽然不甚了解,但知道了这些概念



【明日计划】

准备复盘的PPT





返回列表 返回列表
评论

    分享到