【实训日志】浅读Head First设计模式

Christopher Alexander说过:每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心,这样,你就能一次又一次地使用该方案而不必做重复劳动。这个思想同样适用于面向对象的设计模式,核心就在于提供给了相关问题的解决方案

由于在项目中想尝试使用设计模式,故此对之前的设计模式进行了回顾,这里看的书籍资料是《Head First设计模式

 

主要设计模式的描述

装饰者  包装一个对象,以提供新的行为

状态 封装了基于状态的行为,并使用委托在行为之间切换

迭代器在对象的集合之间游走,而不暴露集合的实现

外观 简化一群类的接口

策略 封装可以互换的行为,并使用委托来决定要使用哪一个

代理 包装对象,以实现对此对象的访问

工厂方法由子类决定要创建的具体类是哪一个

适配器封装对象,并实现不同的接口

观察者让对象能够在状态改变时被通知

模板方法由子类决定如何实现一个算法中步骤

组合客户用意志的方式处理对象集合和单个对象

单件确保有且只有一个对象被创建

抽象工厂允许客户创建对象的家族,而无需制定他们的具体类

命令封装请求成对象

 

OO原则

封装变化

多用组合,少用继承

针对接口编程,不针对实现编程

为交互对象之间的松耦合设计而努力(观察者)

为扩展开放,对修改关闭(装饰者)

依赖抽象,不要依赖具体类(工厂方法)

只和朋友交谈(适配器)

别找我,我会找你(模板方法)

类应该只有一个改变的理由(迭代器与组合)

 

 

OO模式

策略模式----定义算法族,分别封装起来,让他们之间可以互相替换,可以让算法的变化独立于实用算法的用户

观察者模式----在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖他的对象都会受到通知,并自动更新(java的Observable)

装饰者模式----动态的将责任附加到对象上。想要拓展功能,装饰者提供有别于继承的另一种选择

工厂方法模式----定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类吧实例化推迟到子类(1.简单工厂2.工厂方法使用继承,把对象的创建委托给子类3.抽象工厂使用对象组合:对象的创建被实现在工厂接口所暴露出来的方法中)

单件模式----确保一个类只有一个实例,并提供全局访问点

命令模式----将请求封装成对象,这可以让你使用不同的请求、队列,或者日志请求来参数化其他对象。命令模式也可以支持撤销操作(留意宏命令)

适配器模式----将一个类的接口,转换成用户期望另一个接口,适配器让原本不兼容的类可以操作无间(对象适配器和类适配器,后者需要多重继承)

外观模式----提供了一个统一的接口,原来访问子系统中的一群接口,外观定义了一个高层接口,让子系统更容易使用

模板方法模式----在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类在不改变算法结构的情况下,重新定义算法中的某些步骤(父类中的钩子-判定/执行其他行为......)

迭代器模式----提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示(可以树的方式创建对象的结构)

组合模式----允许你将对象组成树状结构来表示“整体/部分”的层级结构。组合能让用户以一定的方式处理个别对象和对象组合(大多数情况下,可以忽略对象组合和个别对象之间的差别)

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

代理模式----为另一个对象提供一个替身或占位符以访问这个对象(1.远程代理 rmi的使用2.保护代理根据访问权限绝对客户可否访问对象的代理3.动态代理--运行时才将类创建出来,根据传入的接口集创建4.其他代理---缓存代理、同步代理、防火墙代理、写入时复制代理......)

复合模式----复合模式结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题(MVC----Model-View-Controller模型 视图 控制器分离    1.视图---用来显示模型。通常直接从模型中取得他需要现实的数据和状态  2.控制器---取得用户的输入并解读其对模型的意思   3.模型---模型持有所有的数据状态和程序逻辑。模型没有注意到视图和控制器,虽然他提供了操纵和检索状态的接口,并发送状态通知给观察者)

------------------------------------其他的一些模式--------------------------------

中介者模式:使用中介者模式来集中相关对象之间负载的沟通和控制方式

用途:常常用来协调相关的GUI组件

备忘录模式:当你需要让对象返回之前的状态时(比如撤销命令),就使用备忘录模式

用途:比较费事的存储和恢复状态(其实在java中可以通过实现序列化来存储系统的状态)

原型模式:当创建给定类的实例的过程的过程很昂贵或很复杂时,就使用原型模式

用途:在一个复杂的类层次中,当必须从其中的许多类型创建新对象时(对象的复制有点复杂)

访问者模式:当你想要为一个对象的组合增加新的能力,且封装不重要时(会打破组合类的封装)

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值