GOF 设计模式(学习Hander First 设计模式 笔记)

一切都是围绕,变化!模式为了封装变化。 封装变化!!解耦系统!!

   

1.策略模式

2009年2月8日

17:05

封装行为

针对接口编程。

通常的设计

1.通过继承父类。

会增加很多特殊子类不需要的行为,所有的子类都受父类影响。

继承提供了复用。

2.实现接口。

虽然可以满足个性化的需要,但是却无法复用。

接口提供个性化

  

  

  

   

这两种做法都是依赖于实现,设计僵硬,无法更改行为。

   

使用行为类方式,子类使用接口所表示的行为,实际的实现不会绑定在子类中。

这样的话,当发生变化的时候,进行的是行为的替换,而不需要修改现有的行为。

也可以添加其他新的行为,并通过配置的方式实现不需要修改现有代码,来应对变化。

在变化的时候,保护了现有的类,而受到变化影响的是行为类。

   

使用行为类的方式

有了继承的复用,却没有包袱。

   

   

   

   

2.观察者模式

2009年2月10日

21:12

   

观察者模式提供了 一个一对多依赖时,松耦合的解决方案。

   

注意,在使用观察者的解决方案里面,存在 两种模式。

   

3.装饰者模式

2009年2月10日

21:46

   

4.工厂模式

2009年2月10日

22:33

   

工厂模式 负责将客户从具体类型中解耦。

抽象工厂模式:解耦,并且负责创建整个产品家族。

   

5.单件模式

2009年2月12日

23:35

   

解决单件模式,线程同步的问题的方法:

1.双重检查加锁。

2.使用急切创建实例,即不使用延迟创建的方式。

   

6.命令模式

2009年2月16日

20:32

   

将动作的"请求者"从动作的"执行者"对象中解耦。

封装变化点,即 使两个对象解耦。

   

将"请求"封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象,命令模式也支持可撤销的操作。

   

  • 命令对象将动作和接收者包进对象中。
  • 可以使用空对象。

       

    通过使用命令模式支持Meta Command Pattern ,即命令宏。

    使用命令模式,可以实现队列,日志。

   

7.适配器模式

2009年2月16日

22:19

   

8.外观模式

2009年2月16日

22:20

   

9.模板方法模式

2009年2月16日

23:01

   

需要注意的是,模板方法有很多中变体。如参数是Icompare ,这时系统里面的一个步骤是调用Icompare.compareto ,这也是一种模板方法。

   

而且实现的时候,如果是必须由子类实现的,那么实现为抽象类,如果是可由子类选择实现的,那么实现为钩子,给出基本的实现,子类可以覆盖。

模板方法和策略模式的区别也就是,策略模式替换的是整个算法,而模板方法,中只是替换一个步骤。

   

10.组合模式

2009年2月16日

23:09

   

使用组合结构,我们能把相同的操作应用在组合和个别对象上,

换句话说,在大多数情况下,我们可以忽略对象组合和个别对象之间的差别。

   

当对象组合和个别对象实现统一的操作接口时,也许有的方法并不能通用,这个时候的最好的的方法就是在不需要实现的方法中,抛出异常。

   

组合模式以单一职责原则换取系统透明性。

组合模式为具有整体/部分的复杂结构,提供了好的透明性,使得系统可以采用统一的接口进行操作。

   

11.状态模式

2009年4月8日

0:09

基本常识:策略模式和状态模式是双胞胎,在出生时才分开。

使用状态模式可以:

1.将每个状态的行为局部化到自己的类中。

2.将容易产生问题的if语句删除。(去掉复杂的条件判断语句,使架构灵活。)

3.让每个状态对修改关闭,让整体对扩展开放。

4.使得代码易于理解。

   

状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

   

状态

策略

状态对象--包含一组行为

行为对象

用户并不知道行为是如何变化的,用户实际上也不能直接操作状态对象,用户只是操作Context对象,修改Context的属性等。

用户直接配置行为对象。

if等复杂条件判断更易于扩展的解决方案,通过将行为包装到状态对象中,可以通过修改context的状态,实现改变行为。

比继承更具有弹性的行为继承方案。可以组合不同的对象改变行为。

   

尽管使用设计模式,通常都会增加很多的类和对象,但是可以让架构变得很干净,在以后理解和维护它们的时候,可以节省时间。

   

12.代理模式

2009年4月13日

22:43

   

代理可以假装自己是远程对象,但其实只是一个中间角色。

   

组合

2008年12月8日

17:55

   

使用组合,让架构具有 运行时改变行为的能力。

转载于:https://www.cnblogs.com/zhuispeed/archive/2009/10/17/1585000.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值