1  2{<HeadFirst设计模式>之装饰模式 }  3{ 本单元中的类为被装饰者         }  4{ 编译工具: Delphi7.0          }  5{ E-Mail : guzh-0417@163.com  }  6  7unit uComponent;  8  9interface 10 11type 12  TBeverage = class(TObject) //抽象饮料类 13  protected 14    FDescription: String; 1…
适配器模式的主要意图是对现有类的接口进行转换,以满足目标类的需求.其次,可以给目标类的接口添加新的行为(主要指方法).这一点容易与装饰模式混淆.从意图方面来看,装饰模式不改变(通常指增加)接口中的行为(主要指方法),而是在原有行为(主要指方法)的基础上添加新的功能:从类结构方面来看,装饰模式中的装饰者既继承又组合被装饰者.类适配器同时继承现有类和目标类,对象适配器继承目标类组合现有类.  1  2{<HeadFirst设计模式>之适配器模式 }  3{ 现有类                 …
简单工厂:工厂依据传进的参数创建相应的产品. http://www.cnblogs.com/DelphiDesignPatterns/archive/2009/07/24/1530536.html {<HeadFirst设计模式>工厂模式之简单工厂 } 3{ 产品类 } 4{ 编译工具 :Delphi7.0 } 5{ 联系方式 :guzh-0417@163.com } 6 7unit uProducts; 8interface 10 11type 12 TPizza = class(TObje…
  1   2{<HeadFirst设计模式>之观察者模式 }   3{ 主题与观察者                    }   4{ 编译工具 :Delphi7.0            }   5{ 联系方式 :guzh-0417@163.com    }   6   7unit uWeatherReport;   8   9interface  10  11uses  12  Classes, SysUtils;  13  14type  15  TObserver = class;…
模板方法模式定义了一个算法骨架,允许子类对算法的某个或某些步骤进行重写(override).   1   2{<HeadFirst设计模式>之模板方法模式 }   3{ 编译工具: Delphi7.0              }   4{ E-Mail : guzh-0417@163.com      }   5   6unit uCoffeineBeverageWithHook;   7   8interface   9  10uses  11  SysUtils;  12  13type…
容器的主要职责有两个:存放元素和浏览元素.根据单一职责原则(SRP)要将二者分开,于是将浏览功能打包封装就有了迭代器. 用迭代器封装对动态数组的遍历:  1  2{<HeadFirst设计模式>之迭代器模式 }  3{ 容器中的元素类                  }  4{ 编译工具:Delphi7.0             }  5{ E-Mail :guzh-0417@163.com     }  6  7unit uItem;  8  9interface 10 11type 1…
 1  2{<HeadFirst设计模式>之策略模式 }  3{ 本单元中的类为策略类           }  4{ 编译工具: Delphi7.0           }  5{ E-Mail : guzh-0417@163.com   }  6  7unit uStrategy;  8  9interface 10 11type 12  {飞行接口,及其实现类 } 13 14  IFlyBehavior = Interface(IInterface) 15    procedure Fl…
  1   2{<HeadFirst设计模式>之命令模式 }   3{ 本单元中的类为命令的接收者      }   4{ 编译工具 :Delphi7.0         }   5{ 联系方式 :guzh-0417@163.com }   6   7unit uReceiveObject;   8   9interface  10  11type  12  TLight = class(TObject)  13  private  14    FLocation: String;  15  …
一.一个叫声接口和几只鸭子 从一个叫声接口开始. {<HeadFirst设计模式>Delphi代码之模式小结 } { 一个叫声接口                            } { 编译工具:Delphi2010 for win32          } { E-Mail :guzh-0417@163.com             } unit uQuackable; interface type IQuackable = interface(IInterface) proced…
 1  2 {<HeadFirst设计模式>工厂模式之抽象工厂 }  3 { 抽象工厂的产品                       }  4 { 编译工具:Delphi7.0                  }  5 { E-Mail :guzh-0417@163.com          }  6  7unit uPizzaIngredient;  8  9interface 10 11type 12  TDough = class(TObject) 13  end; 14 15  …
 1  2{<HeadFirst设计模式>之组合模式 }  3{ 组合与单项的抽象父类           }  4{ 编译工具:Delphi2007 for win32}  5{ E-Mail :guzh-0417@163.com   }  6  7unit uMenuComponent;  8  9interface 10 11uses 12  SysUtils; 13 14type 15  TMenuComponent = class abstract(TObject) 16  publ…
  1   2{<HeadFirst设计模式>工厂模式之工厂方法 }   3{ 产品类                              }   4{ 编译工具 :Delphi2007 for win32      }   5{ 联系方式 :guzh-0417@163.com         }   6   7unit uProducts;   8   9interface  10  11type  12  { abstract Pizza }  13  14  TPizza = cl…
 1  2{<HeadFirst设计模式>之单例模式 }  3{ 编译工具: Delphi2007 for win32 }  4{ E-Mail : guzh-0417@163.com  }  5  6unit uChocolateBoiler;  7  8interface  9 10type 11  TChocolateBoiler = class(TObject) 12  strict private 13    class var 14      FUniqueInstance: TC…
原文地址:[Head-First设计模式]C#版-学习笔记-开篇及文章目录 最近一年断断续续的在看技术书,但是回想看的内容,就忘了书上讲的是什么东西了,为了记住那些看过的东西,最好的办法就是敲代码验证,然后将书上的内容和自己的总结一起分享出来,这样看书的效果就会有大大提升. 最近在看一本讲JAVA设计模式的书,本人是C#开发,并想将书上的内容转换成C#的,然后写到博客上,以后查阅也方便,大家也可以参考参考. 本篇是开篇,也是文章目录. 01.策略模式-上篇 02.单件模式 03.命令模式 参考文…
最近看完了<HeadFirst设计模式>,GOF的<设计模式——可复用面向对象软件的基础>的创建型模式也读完了,经历了从一无所知到茅塞顿开再到充满迷惑的过程. 不得不说<HeadFirst设计模式>是一本非常好的入门书,每一章都是先提出问题,然后讨论.分析,引导出相应的设计模式,再一步一步的实现,幽默的语言和有趣的插图,让人轻松愉快的学习了一个模式.之前我对学习设计模式是有很大的畏难情绪的,上网一搜一看,妈个鸡,动不动就什么GOF什么23个设计模式,然后找个工厂方法或者…
定义 观察者模式(有时又被称为发布(publish)-订阅(Subscribe)模式,在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察者所提供的方法来实现.此种模式通常被用来实现事件处理系统(摘自百度百科). 关键词:发布-订阅 为什么只有一个关键词?因为我觉得一个关键词足够说明问题了.观察者模式适用于,一个对象改变时,需要通知一个或多个其他对象,而需要通知的对象的特点是:数量不清楚,类型不清楚(仅实现了一个通用接口),具体处理方…
先编一个这么久不写的理由 上周我终于鼓起勇气翻开了headfirst设计模式这本书,看看自己下一个设计模式要写个啥,然后,我终于知道我为啥这么久都没写设计模式了,headfirst的这个抽象工厂模式,额,我看了好几次,都不太理解. 在我的印象中,简单工厂,工厂方法,抽象工厂,这三个东西应该是层层递进的,然后我带着这个思路去看,emmmm,真的没看懂,还好最近又补了一遍<大话设计模式>,揣着刚刚温习了的新知识,然后又上了headfirst这条船,我感觉我这次应该是看懂了. 所以不写并不是因为忙,…
<大话设计模式>Python版代码实现 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼界.<大话设计模式>的代码使用C#写成的,而在本人接触到的面向对象语言中,只对C++和Python还算了解,为了加深对各个模式的理解,我在网上下载了一个C++版的源代码,并根据自己的理解边读这本书边动手实践C++源代码,同时将其改写成了Python代码,算是一箭三雕吧. 由于这些代码的目的是展示各…
headfirst设计模式这本书真好,准备用一个月学完.书里讲得很清楚了. 设计原则: 1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起. 2.针对接口编程,而不是针对实现编程. 书中的代码是用java写得,现在正用swift,便做个翻译,没啥技术含量. protocol FlyBehavior { func fly() ->Void } protocol QuackBehavior { func quack() ->Void } class CannotFl…
HeadFirst设计模式<1> 1 策略模式 鸭子飞行和嘎嘎叫策略 2 工厂模式 简单工厂 工厂方法 抽象工厂 简单工厂简单的pizza工厂 通过一个工厂类的方法,创建和返回对象实例 原来混乱的代码: 修改后 简单工厂类图 Pizza店变成加盟店 在创建Pizza时将工厂传进去 想要多一些的质量控制,每个pizza店的工艺又不一样,有的先切再烤,有的先烤再切. 现在来看看Pizza店的多态.将变化的东西移到低层(实现,子类),抽象的共性移到高层(超类或接口)这边把Pizza的工艺流程移到子类…
以往虽也看过相关设计模式的书籍,但能和与HeadFirt设计模式这本书相比不是缺乏严谨性就是缺乏具体应用实例,还有幽默生动以及引人启发的观点. 设计原则 设计原则并不能光靠死记硬背,我们需要通过具体的设计模式来反思:该模式符合与违背了哪些设计原则. 不过在进入下文讨论之前,让我们先大概看看设计原则都有哪些. 封装变化 针对接口编程,而不是实现 多用组合少用继承 松耦合 对修改关闭,对扩展开放 依赖抽象不依赖具体 最少知识原则:只和亲密对象交谈 好莱坞原则:别打电话给我,我会打给你 单一职责 谈谈…
最近在看HeadFirst设计模式一书,作为一个半路出家的程序员,感觉很多东西需要学习,学习的路程中有些东西学了当时觉得理解了,但日常工作中没有使用到渐渐的自己就忘记了.----------------------上面就是写者系列的博客的原因,主要是为了巩固知识,忘记在那个博主那边看过这么一句话,知识学了后总结了才变成自己的. 策略者模式----定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 当然这只是理论的东西,说实话我现在都没理解这个理论是啥,下…
前言 最近在学习<Headfirst设计模式>,里面的例子都是Java的.但是我对Java并不熟悉,所以试着用C++来实现书中的例子. 先来看看Duck以及子类 Duck.h #include <iostream> #include "FlyBehavior.h" class Duck { private: FlyBehavior *m_p_fly_behavior; public: virtual void quack() { std::cout <&l…
  .NET设计模式(10):装饰模式(Decorator Pattern)   装饰模式(Decorator Pattern) --.NET设计模式系列之十 年月..在....对于..由于使用装饰模式,可以比使用继承关系需要较少数目的类.使用较少的类,当然使设计比较易于进行.但是,在另一方面,使用装饰模式会产生比使用继承关系更多的对象.更多的对象会使得查错变得困难,特别是这些对象看上去都很相像. 适用性 在以下情况下应当使用装饰模式: 1.需要扩展一个类的功能,或给一个类增加附加责任. 2.需…
HeadFirst设计模式读书笔记(1)-策略模式(Strategy Pattern) HeadFirst设计模式读书笔记(2)-观察者模式(Observer Pattern) HeadFirst设计模式读书笔记(3)-装饰者模式(Decorator Pattern)…
设计模式之第4章-装饰模式(Java实现) “怎么了,鱼哥?” “唉,别提了,网购了一件衣服,结果发现和商家描述的差太多了,有色差就算了,质量还不好,质量不好就算了,竟然大小也不行,说好的3个X,邮的却是一个X的,不说了,退货去.你先开讲吧,你说说就一个东西还装饰个什么劲儿.”(装饰模式石化中:这关我什么事儿撒.)恩,今天由我来讲,讲之前先来个段子:话说面条被追到一个理发店,出来一个方便面,然后追他的人一把抓住他就开打:小子(第四声),烫个头发我就不认识你了么?其实那人认错了,出来的真的是方便面…
近期在看HeadFirst,接下来的一段时间会陆续更新有关HeadFirst设计模式相关的文章.记得非常久之前在学习大话设计模式的时候,仅仅是走马观花的大致走过一遍.至于里面非常多东西都掌握的不是非常好.恰巧又接触了HeadFirst,想着还是把设计模式好好的整理一下,至于是大话设计还是HeadFirst,个人看来是无关紧要的. 本着学习的目的,并且都是设计模式,仅仅只是一个是C#,一个是Java. 本来第一篇文章想着从观察者模式開始讲起,可是想着想着.还是把UML的类图的关系捋一下吧.不然的话…
HeadFirst设计模式<2> 1 装饰者模式 星巴克咖啡 饮料 总结 如果说策略模式是通过组合实现弹性,那么装饰者模式就是通过继承来实现,在实现的同时,客户基本感觉不到使用了装饰者模式 2 适配器模式 对象适配器 类适配器 火鸡 总结 适配器模式和装饰者模式非常像,适配器模式是适配对象接口,而装饰者模式不改变对象接口的情况下给对象新的职责.…
设计模式:一个程序员对设计模式的理解:“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把锁的模式,目的仅仅是着眼于解决现在的问题,而设计模式的“复杂”就在于它是要构造一个“万能钥匙”,目的是提出一种对所有锁的开锁方案.在真正理解设计模式之前我一直在编写“简单”的代码.这个“简单”不是功能的简单,而是设计的简单.简单的设计意味着缺少灵活性,代码很钢硬,只在这个项目里有用,拿到其它的项目中…
设计模式:解决某一类问题行知最有效的方法.java有23种设计模式 单列设计模式: 解决一个类在内存中只存在一个对象 思路:(要保证对象的唯一性) 1.为了避免其它程序建立该对象,先禁止替他类创建改对象,(构造函数私有化) 2.还能让其他程序可以访问到该对象,只能在该类中自己生成一个对象 3.为了其他程序可以访问到当中的值,可以设计一些方法获取到值.   当然他们当中有两种方式:懒汉式,饿汉式. (其中两者的区别是在内存当中的何时创建) 下面是饿汉式的代码:(写法)(开发一般用这个方法) //创…