设计模式心得

Decorator模式

装饰模式的作用是动态的给一个对象添加一些额外的职责,采用组合的方式,比继承更灵活。
- 可以变通的添加或减少Component和Decorator类
- 新添加的额外职责仅仅为了满足特定情况才会执行的特殊行为
- 每个装饰功能都放在一个单独的类中,此类包装装饰的对象
- 客户可以有选择的、按顺序地使用这些装饰功能包装对象


Composite模式

组合模式将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
- 枝节点具备Add、Remove等,叶节点只具有统一接口功能
- 用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象
- 基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断地递归下去
- 组合模式让客户可以一致地使用组合结构和单个对象


Flyweight模式

运用共享技术有效地支持大量细粒度的对象。
- 将对象分解成intrinsic和extrinsic两部分
- 内部状态:在享元对象内部并且不会随环境改变而改变的共享部分,可以称为是享元对象的内部状态
- 外部状态:而随环境改变而改变的,取决于应用环境,或是实时数据,这些不可以共享的东西就是外部状态了
- 在Flyweight模式应用中,通常修改的是外部状态属性,而内部状态属性一般都是用于参考或计算时引用
- Flyweight:享元类的基类,定义一个接口,通过这个接口Flyweight可以接受并作用于外部状态
- ConcreteFlyweight:实现Flyweight接口, 并为内部状态( 如果有的话) 增加存储空间。ConcreteFlyweight对象必须是可共享的。它所存储的状态必须是内部的(intrinsic);即,它必须独立于ConcreteFlyweight对象的场景
- UnsharedConcreteFlyweight:并非所有的Flyweight子类都需要被共享。Flyweight接口使共享成为可能,但它并不强制共享。在Flyweight对象结构的某些层次,UnsharedConcreteFlyweight对象通常将ConcreteFlyweight对象作为子节点
- FlyweightFactory创建并管理Flyweight对象。确保合理地共享Flyweight。当用户请求一个Flyweight时,FlyweightFactory对象提供一个已创建的实例或者创建一个(如果不存在的话)


Facade模式

外观为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。将一个系统划分成为若干个子系统有利于降低系统的复杂性。一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小。达到该目标的途径之一是就是引入一个外观(Facade)对象,它为子系统中较一般的设施提供了一个单一而简单的界面。将各个子系统整合起来作为Facade,提供给客户端使用。
- 为一个复杂子系统提供一个简单接口
- 构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点。仅通过facade进行通讯
- 客户程序通过发送请求给Facade的方式与子系统通讯, Facade将这些消息转发给适当的子系统对象


Proxy模式

代理模式为其他对象提供一种代理以控制对这个对象的访问。
- Subject:声明了真实主题和代理主题的共同接口,这样一来在任何使用真实主题的地方都可以使用代理主题
- Proxy:代理主题角色内部含有对真实主题的引用,从而可以在任何时候操作真实对象主题;代理主题角色提供一个与真实主题角色相同的接口,以便可以在任何时候都可以替代真实主题;控制真实主题的应用,负责在需要的时候创建真实主题对象(和删除);代理角色通常在将客户端调用传递给真实的主题之前或之后,都要执行某个操作,而不是单纯的将调用传递给真实主题对象
- 按照目的划分有远程代理、虚拟代理、保护代理、智能引用代理、缓存代理


Template模式

模板模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构就可以重定义改算法的某些步骤,其关键是将通用算法逻辑封装在抽象基类中,并将不同的算法细节放到子类中实现。
- 模板方法模式是通过把不变行为搬移到基类,去除之类中的重复代码来体现它的优势
- 当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠
- Strategy模式和Template模式实际是实现一个抽象接口的两种方式:继承和组合之间的区别。要实现一个抽象接口,继承是一种方式:我们将抽象接口声明在基类中,将具体的实现放在具体子类中。组合(委托)是另外一种方式:我们将接口的实现放在被组合对象中,将抽象接口放在组合类中。


Strategy模式

策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户。
- Strategy模式将逻辑(算法)封装到一个类(Context)里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现
- 将算法的逻辑抽象接口(DoAction)封装到一个类中(Context),再通过委托的方式将具体的算法实现委托给具体的Strategy类来实现(ConcreteStrategeA类)
- 策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类于使用算法类之间的耦合
- - 策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法中的公共功能


State模式

状态模式思想不复杂,就是实现起来的代码有点复杂。主要出现在类传递参数上。状态模式是当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类,主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同的一系列类当中,可以把复杂的逻辑判断简单化。
- Context定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理
- State定义一个接口以封装使用上下文环境的的一个特定状态相关的行为
- 策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类于使用算法类之间的耦合
- - ConcreteState实现抽象状态定义的接口


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值