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…
 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…
一.一个叫声接口和几只鸭子 从一个叫声接口开始. {<HeadFirst设计模式>Delphi代码之模式小结 } { 一个叫声接口                            } { 编译工具:Delphi2010 for win32          } { E-Mail :guzh-0417@163.com             } unit uQuackable; interface type IQuackable = interface(IInterface) proced…
简单工厂:工厂依据传进的参数创建相应的产品. 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 { 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{ 编译工具 :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{ 现有类                 …
 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{ 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{ 本单元中的类为命令的接收者      }   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  …
一. 1.The Singleton Pattern ensures a class has only one instance, and provides a global point of access to it. 2. 3. 二.例子一:线程不安全 package headfirst.designpatterns.singleton.chocolate; public class ChocolateBoiler { private boolean empty; private boole…
先编一个这么久不写的理由 上周我终于鼓起勇气翻开了headfirst设计模式这本书,看看自己下一个设计模式要写个啥,然后,我终于知道我为啥这么久都没写设计模式了,headfirst的这个抽象工厂模式,额,我看了好几次,都不太理解. 在我的印象中,简单工厂,工厂方法,抽象工厂,这三个东西应该是层层递进的,然后我带着这个思路去看,emmmm,真的没看懂,还好最近又补了一遍<大话设计模式>,揣着刚刚温习了的新知识,然后又上了headfirst这条船,我感觉我这次应该是看懂了. 所以不写并不是因为忙,…
Singleton和Double-Checked Locking设计模式,分别指的是单例模式和双重检查锁模式,它们都可以用于确保某个类只有一个对象实例化. 两个模式的区别在于:Singleton模式用在单线程应用程序中,而Double-Checked Locking模式用于多线程模式. 一.Singleton模式 UML图: 代码: package bupt.xujinliang.singletonpattern; /** * * @author jin * */ public class Si…
原文地址:[Head-First设计模式]C#版-学习笔记-开篇及文章目录 最近一年断断续续的在看技术书,但是回想看的内容,就忘了书上讲的是什么东西了,为了记住那些看过的东西,最好的办法就是敲代码验证,然后将书上的内容和自己的总结一起分享出来,这样看书的效果就会有大大提升. 最近在看一本讲JAVA设计模式的书,本人是C#开发,并想将书上的内容转换成C#的,然后写到博客上,以后查阅也方便,大家也可以参考参考. 本篇是开篇,也是文章目录. 01.策略模式-上篇 02.单件模式 03.命令模式 参考文…
最近看完了<HeadFirst设计模式>,GOF的<设计模式——可复用面向对象软件的基础>的创建型模式也读完了,经历了从一无所知到茅塞顿开再到充满迷惑的过程. 不得不说<HeadFirst设计模式>是一本非常好的入门书,每一章都是先提出问题,然后讨论.分析,引导出相应的设计模式,再一步一步的实现,幽默的语言和有趣的插图,让人轻松愉快的学习了一个模式.之前我对学习设计模式是有很大的畏难情绪的,上网一搜一看,妈个鸡,动不动就什么GOF什么23个设计模式,然后找个工厂方法或者…
定义 观察者模式(有时又被称为发布(publish)-订阅(Subscribe)模式,在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察者所提供的方法来实现.此种模式通常被用来实现事件处理系统(摘自百度百科). 关键词:发布-订阅 为什么只有一个关键词?因为我觉得一个关键词足够说明问题了.观察者模式适用于,一个对象改变时,需要通知一个或多个其他对象,而需要通知的对象的特点是:数量不清楚,类型不清楚(仅实现了一个通用接口),具体处理方…
<大话设计模式>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…
设计模式之第0章-单例模式(Java实现) 当当当当~首先有请最简单的单例模式登场,先来个自我介绍吧 单例模式之自我介绍 我,单例模式(Singleton Pattern)是一个比较简单的模式,我的定义如下: Ensure a class has only one instance,and provide a global point of access to it.(确保其某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.)单例模式的通用类图如下: Singleton类称为单例类,…
HeadFirst设计模式<1> 1 策略模式 鸭子飞行和嘎嘎叫策略 2 工厂模式 简单工厂 工厂方法 抽象工厂 简单工厂简单的pizza工厂 通过一个工厂类的方法,创建和返回对象实例 原来混乱的代码: 修改后 简单工厂类图 Pizza店变成加盟店 在创建Pizza时将工厂传进去 想要多一些的质量控制,每个pizza店的工艺又不一样,有的先切再烤,有的先烤再切. 现在来看看Pizza店的多态.将变化的东西移到低层(实现,子类),抽象的共性移到高层(超类或接口)这边把Pizza的工艺流程移到子类…
以往虽也看过相关设计模式的书籍,但能和与HeadFirt设计模式这本书相比不是缺乏严谨性就是缺乏具体应用实例,还有幽默生动以及引人启发的观点. 设计原则 设计原则并不能光靠死记硬背,我们需要通过具体的设计模式来反思:该模式符合与违背了哪些设计原则. 不过在进入下文讨论之前,让我们先大概看看设计原则都有哪些. 封装变化 针对接口编程,而不是实现 多用组合少用继承 松耦合 对修改关闭,对扩展开放 依赖抽象不依赖具体 最少知识原则:只和亲密对象交谈 好莱坞原则:别打电话给我,我会打给你 单一职责 谈谈…
最近在看HeadFirst设计模式一书,作为一个半路出家的程序员,感觉很多东西需要学习,学习的路程中有些东西学了当时觉得理解了,但日常工作中没有使用到渐渐的自己就忘记了.----------------------上面就是写者系列的博客的原因,主要是为了巩固知识,忘记在那个博主那边看过这么一句话,知识学了后总结了才变成自己的. 策略者模式----定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 当然这只是理论的东西,说实话我现在都没理解这个理论是啥,下…
原文链接: http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part-2-singleton/ Design Patterns Simplified - Part 2 (Singleton)[设计模式简述--第二部分(单例模式)]       I am here to continue the explanation of Design Patterns. Today we will explai…
前言 最近在学习<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…
HeadFirst设计模式读书笔记(1)-策略模式(Strategy Pattern) HeadFirst设计模式读书笔记(2)-观察者模式(Observer Pattern) HeadFirst设计模式读书笔记(3)-装饰者模式(Decorator Pattern)…
近期在看HeadFirst,接下来的一段时间会陆续更新有关HeadFirst设计模式相关的文章.记得非常久之前在学习大话设计模式的时候,仅仅是走马观花的大致走过一遍.至于里面非常多东西都掌握的不是非常好.恰巧又接触了HeadFirst,想着还是把设计模式好好的整理一下,至于是大话设计还是HeadFirst,个人看来是无关紧要的. 本着学习的目的,并且都是设计模式,仅仅只是一个是C#,一个是Java. 本来第一篇文章想着从观察者模式開始讲起,可是想着想着.还是把UML的类图的关系捋一下吧.不然的话…
HeadFirst设计模式<2> 1 装饰者模式 星巴克咖啡 饮料 总结 如果说策略模式是通过组合实现弹性,那么装饰者模式就是通过继承来实现,在实现的同时,客户基本感觉不到使用了装饰者模式 2 适配器模式 对象适配器 类适配器 火鸡 总结 适配器模式和装饰者模式非常像,适配器模式是适配对象接口,而装饰者模式不改变对象接口的情况下给对象新的职责.…