1、设计模式之士兵突击,姜纯洋产品设计中心终小南,目录,设计模式概述故事背景交待工厂模式建造者模式,设计模式概述,whatwhyhow,故事背景,故事角色,士兵小王的烦恼,最近士兵小王觉得很苦恼,因为军械库有规定,士兵如果想领取一件武器均需要在登记单上登记自己的姓名、职务、所属番号、所在连的名称,班的名称等等,非常繁琐,最近有一次领取装备的时候因为忘记写自己的职务而被连队领导处分了。,简单工厂模式,武器类,工厂类,客户端调用,实际应用,$db = new DB(127.0.0.1, test, root, 123456, 3306);,$factory = new Factory();$db =
2、$factory-getDb();,士兵小王的新烦恼,根据不同的训练需求,小王今天被要求带着狙击枪去靶场练射击,可是武器管理员只负责手枪的分发。小王怎么办?,加强的工厂,实际应用,数据缓存设计,Memcached,Redis,MongoDB,静态文件,管理员的烦恼,刚开始军队指定了一名管理员,很好的管理了军械工作,后来由于军队里人员变多,武器种类也变多了,不同的武器装备可能需要登记的项目也不同,管理员的压力越来越大,尽管每天工作的小心翼翼,有一次还是不小心给一个狙击枪手发了一杆冲锋枪,为此,管理员也受到了连队的严重处份。,工厂方法,实际应用,新付通,招商银行,工商银行,农业银行,建设银行,中国
3、银行,徽商银行,北京银行,天津银行,厦门银行,中信银行,光大银行,广发银行,交通银行,士兵和管理员们的新烦恼,由于最近新引进了一批设备,比如带有物理瞄准器的狙击枪一律换代,换成更为精准的带有光学瞄准器的狙击枪。这样一来,为了让士兵顺利的获得带有光学瞄准器的狙击枪,我们有两个办法:第一、通知所有狙击枪手到新的武器管理员处领取武器;第二、原来的武器管理员升级,直接接手新式武器的管理。我们先讨论第一种方式:因为士兵多,肯定会存在通知不到的情况,会不会有士兵仍然跑到原来的武器管理员处领取装备呢?第二种方式:原来的物品管理员全盘接手新式武器管理,这样如果有一天,有可能有一些士兵需要使用旧式武器就无处申请
4、。,抽象工厂模式,应用环境,上传文件,普通上传方法,WEB服务器本地存储,SAE上传方法,独立的存储服务器,士兵小王的新烦恼,小王是一名狙击枪手,但是连队规定,所有的武器在不用的时候必须拆分存放,而武器库里有很多种型号的狙击枪,每次小王去领武器的时候都要分别到不同的地方领取瞄准器、枪托和子弹,经常会出现所领的零部件不匹配或者忘记领取某些零件的情况,请问我们如何帮助小王?,建造者模式,应用环境,博客系统,博客正文,作者数据,相关博文数据,评论数据,其它数据,士兵小王的新烦恼,作为狙击枪手的小王,经常会被要求执行不同的任务,任务的不同可能需要的狙击枪的配置也不同,而负责给小王组装武器的管理员只会拼
5、装一种配置的武器,小王自己去执行武器的拼装又容易出错。,建造者模式,实际应用,博客系统,WEB版,WAP版,客户端版,管理员的烦恼,由于任务的复杂多样,很多时候对狙击枪的需求也是复杂多样的,这样为了适应更多的需求,每次招募进来的新兵都需要对他们进行武器组装方面的指导,而新兵的培训需要的时间往往很长,所以很麻烦。可是即便如此,还是有一部分士兵在组装武器的时候会忘记组装某些零件,我们有什么办法可以降低新兵培训的难度呢?,指挥者的登场,实际应用,中间件,WEB版,WAP版,客户端版,博客系统,总结,共同点:两者都是为了构建复杂的对象而生的,都属于创建者模式。,不同点一:两者的作用是不同的,建造者模式,注重的是我们要生产对象的规则,比如我们一个对象应该由什么部分组成。而工厂模式,重视的是工厂的规则,比如我们这个工厂方法可以用来生成怎样的对象。,不同点二:两者的目的是不同的,建造者模式重点是利用接口、抽象类的规范作用,对我们实例化一个类的过程进行规范化,使生成一个对象的逻辑和它的表现是分离的。而工厂模式主要是为了利用接口、抽象类的多态的作用,实现具体类和代码的分离,便于实现不同工厂或者类之间的切换。,其它,参考资料:PHP设计模式、搜索引擎 讲稿下载:交流:终小南,Q&A,Thanks!,