随笔分类 -  Head First 设计模式

摘要:模式汇总:装饰者 :包装一个对象以得到新的行为状态 :封装了基于状态的行为,并使用委托在行为之间切换迭代器 :在对象的结合中游走,而不暴露集合的实现外观 :简化一群类的接口策略 :封装可以互换的行为,病史用委托类决定要使用哪一个代理 :包装对象,以控制对此对象的访问工厂方法 :由子类决定要创建的对象 阅读全文
posted @ 2017-01-04 09:05 bad_boy_f 阅读(536) 评论(0) 推荐(0)
摘要:代理模式:为另一个对象提供一个替身或占位符以控制对这个对象的访问。 代码: 类图: 这里SecretaryProxy就是一个代理,在Boss开会前会通知Boss开会,还可以控制一些小的会议不用参加。 代理模式和装饰者模式很像,都是用一个对象把被封装对象封装起来,然后调用封装的对象。但是代理模式的目的 阅读全文
posted @ 2017-01-03 22:01 bad_boy_f 阅读(201) 评论(0) 推荐(0)
摘要:状态模式:允许对象在内部状态改变时改变他的行为,对象看起来好像修改了他的类。 用到的设计原则1、封装变化2、多用组合,少用继承3、针对接口编程,不针对实现编程4、松耦合5、对扩展开放,对修改关闭6、依赖抽象,而不依赖具体7、只和朋友交谈8、别找我,我会找你9、类应该只有一个修改的理由 例子来自《He 阅读全文
posted @ 2016-12-26 20:28 bad_boy_f 阅读(545) 评论(0) 推荐(0)
摘要:迭代器模式:提供一种方法书序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 用到的设计原则:1、封装变化2、多用组合,少用继承|3、针对接口编程,不针对实现编程4、松耦合5、对扩展开放,对修改关闭6、依赖抽象,不依赖具体7、只和朋友交谈8、别找我,我会找你9、类应该只有一个改变的理由 迭代器 阅读全文
posted @ 2016-12-26 16:32 bad_boy_f 阅读(326) 评论(0) 推荐(0)
摘要:模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。设计原则:1、封装变化2、多用组合少用集成3、针对接口变成而非实现4、松耦合5、类对修改关闭,对扩展开放6、依赖抽象而飞具体类7、只和朋友交谈(迪米特原则) 阅读全文
posted @ 2016-12-26 11:20 bad_boy_f 阅读(310) 评论(0) 推荐(0)
摘要:适配器模式:将一个类东街口转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 适配器模式有两种,对象适配器和类的适配器。先看一下对象适配器。 还是看最开始鸭子的例子,如果此时鸭子不够了,需要一个火鸡来充当一个鸭子。 对象适配器 类图: 适配器的需要进行的工作和目标接口的大小成正比。 阅读全文
posted @ 2016-12-23 11:28 bad_boy_f 阅读(296) 评论(0) 推荐(0)
摘要:命令模式:将“请求”封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。用到的原则:1、封装变化2、组合优于继承3、针对接口编程,不能针对实现编程4、解耦5、类对修改关闭,对扩展开放6、依赖抽象,不依赖具体 命令模式很好理解,直接看代码 类图 命令模式主要就是让 阅读全文
posted @ 2016-12-22 20:40 bad_boy_f 阅读(296) 评论(0) 推荐(0)
摘要:单例模式:确保一个类只有一个实例,并提供一个全局访问点。用到的设计原则:1、封装变化2、组合优于集成3、针对接口变成而不是针对实现4、为交互对象之间的松耦合设计而努力5、类应该对扩展开放,对修改关闭6、依赖抽象,而不是依赖具体类 最简单的单例 但是这样在多线程的情况下就会出问题。当两个线程同时第一次 阅读全文
posted @ 2016-12-22 19:24 bad_boy_f 阅读(264) 评论(0) 推荐(0)
摘要:(用到了依赖倒置原则) 我们写的代码中,有的时候可能会出现根据外面给定的不同的参数在方法中根据参数实例化不同的实例,就是会根据不同的参数会new出不同的实例。如果这么写了,这段代码会非常的脆弱,一旦出现新的类型,那么就需要重写将这段代码找出来添加写的new。之前说过针对接口编程,而不是针对实现。这句 阅读全文
posted @ 2016-12-22 18:46 bad_boy_f 阅读(305) 评论(0) 推荐(0)
摘要:装饰者模式:动态的将责任附加到对象上,若要扩展功能,装饰者提供了比集成更有弹性的替代方案。设计原则:1:封装变化2:多用组合,少用继承3:针对接口编程,不针对实现编程4:为对象之间的松耦合设计而努力5:对修改关闭,对扩展开放 用Head First 设计模式中的例子。 一个咖啡店,会有各种类型的咖啡 阅读全文
posted @ 2016-12-22 13:53 bad_boy_f 阅读(491) 评论(0) 推荐(0)
摘要:观察者模式定义了对象之间一对多的依赖,这样依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 假如有这么一个项目,监控每天的天气状况WeatherData(温度,湿度,气压)。有布告板显示天气的不同内容。天气要实时更新,布告板内容也会随着更新。要求可扩展,将来还有可能有别的布告板,W 阅读全文
posted @ 2016-12-19 21:04 bad_boy_f 阅读(234) 评论(0) 推荐(0)
摘要:策略模式:第一了算法族,分别封装起来,让他们之间可以互相替换,次模式让算法的变化独立于使用算法的客户。 首先看个错误的面向对象。 假如我们需要写一个关于鸭子的程序,各种类型的鸭子。第一想到的就是建一个Duck接口,然后各种鸭子实现这个接口。 但是如果突然有一天,有个新需求,要有一个会飞的鸭子。那么炸 阅读全文
posted @ 2016-12-15 21:06 bad_boy_f 阅读(347) 评论(0) 推荐(0)