设计模式.ppt

上传人:少林足球 文档编号:3590367 上传时间:2019-09-14 格式:PPT 页数:26 大小:1.03MB
返回 下载 相关 举报
设计模式.ppt_第1页
第1页 / 共26页
设计模式.ppt_第2页
第2页 / 共26页
设计模式.ppt_第3页
第3页 / 共26页
设计模式.ppt_第4页
第4页 / 共26页
设计模式.ppt_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《设计模式.ppt》由会员分享,可在线阅读,更多相关《设计模式.ppt(26页珍藏版)》请在三一文库上搜索。

1、设计模式,目录,1.面向对象思想 2.模式原则 3.单例模式,1.面向对象,面向对象的思想误区,传统的编程是面向过程的编程,比如c语言的编程习惯。而面向对象的思想与面向过程有很大不同,且不容易理解。 面向过程不仅仅只是使用了类,很多时候,我们用面向对象的方法,写出来的代码却与面向过程大同小异。不过是换了一个马甲而已。,例1:以表单处理为例,面向过程: 1 .$data.; 9 10 $data = $_GETdata; 11 $data = filter($data); 12 $data = deal($data); 13 ?,伪面向对象。 1 .$data.; 10 11 12 $data

2、= $_GETdata; 13 $form = new Form; 14 $data = $form-filter($data); 15 $data = $form-deal($data);,何为面向对象? 通俗地讲,就是让程序的执行过程按照事物的流程走下来。 那么以上的程序应该改成这样:,1 class Form 2 /每个表单都应该有一个数据的属性 3 private $data; 4 function _construct($data) 5 $this-data = $data; 6 7 /数据过滤,无须告知表单处理什么数据,自动处理自身设置的数据 8 function filter()

3、 9 $this-data = htmlentities($this-data); 10 11 /数据处理 12 function deal() 13 $this- = .$this-data.; 14 15 /获得处理后得数据 16 function getData() 17 return $this-data; 18 19 ,20 $data = $_GETdata; 21 $form = new Form($data); 22 $form-filter(); 23 $form-deal(); 24 echo $form-getData();,这样,在实例化一个类以后它的本身就附带了一个数

4、据属性,为了让它更加灵活,可以增加一个修改数据的公有方法,这样就可以方便地修改私有属性了。,public function setData($data) $this-data = $data; $data = $_GETdata; $form = new Form($data); $form-setData(另外的数据); $form-filter(); $form-deal(); echo $form-getData();,面向对象是一种设计思想,它更好地体现程序的流程,把细节分离开来,它使代码的结构条理清晰,更加易于阅读和理解,让编程更加人性化,在大型项目中应用面向对象的思想,能提高项目的

5、成功率。,小结,现实生活中的项目中,需求随时可能要变化,而需求的变化就会导致一个项目开发难度得增大,一个项目如果不能很好地变化,就会导致一个项目的失败,面向对象编程则提供了很好的解决方案。,OO是一种抽象。何为抽象,抽象就是抽出事物之中相像的地方。,OO的设计思路是要把“变化”留出来。,没有OO特征的编程语言也可以用OO思想开发。,OO的三大特点:封装、继承、多态。多态是OO的核心。,令产品经理发疯的用户需求,休息一下,1、Dropbox提供储存功能,然后用户要求提供删除功能。提供之后,用户要求提供误删除恢复功能。提供之后,用户要求提供永久删除无法恢复功能。提供之后,用户要求提供永久删除紧急恢

6、复功能。提供之后,dropbox创始人自杀,遗书上写着:I AM A SB. 2、Facebook入华,用户要求提供注销功能。提供之后,用户要求提供恢复帐号功能。提供之后,用户要求提供永久注销功能。提供之后,用户要求 提供永久注销后反悔功能。提供之后,用户要求提供永久注销后不能反悔功能。Mark自杀,遗书是:你们他妈的有准主意的时候吗? 3、iPhone5全面进入中国,用户要求提供四喇叭。乔布斯提供之后,用户要求有镜子。乔布斯提供之后,用户要求有收音机。乔布斯提供之后,用户 要求有手写板。乔布斯提供之后,用户要求提供双卡双待。提供之后,用户要求预装动感地带。乔布斯吐血说:去华强北直接买山寨机会

7、死啊? 4、Twitter获准入华,用户要求提供评论功能。提供之后,用户要求提供传图功能。提供之后,用户要求提供表情功能。提供之后,用户要求提供 5000字符。提供之后,用户要求上传音频。提供之后,用户要求绑定美图秀秀。提供之后,用户破口大骂:操你妈是谁说推特简洁的? 5、一位腾讯的QQ产品经理崩溃了,发疯之前他根据用户需求依次做了以下功能:隐身,对其隐身,隐身对其可见,对其一三五隐身,对其21点后隐身, 对其隐身可见签名,对其隐身可见最后一次在线签名,隐身对其可见但只显示最后一次在线签名,对其隐身群内自动屏蔽呈不在线状且他人不能提及。,有了面向对象的基础,我们接着要讲两个设计模式。 设计模式

8、的最显著的优点如下: 它们给你提供一个解决已有的并经过项目考验的类似问题的方案。这个解决方案促进复杂关系模块向着最低化耦合发展。它们将系统中可能存在的变化孤立起来,使整个系统更容易理解和维护。 设计模式是设计人员间的交流更为有效。软件专业人员可以马上在脑海中勾画出一个高水平的设计方案,并想到以前解决类似问题的设计模式的名称。,2.模式原则,使用组合,情景编程:在写一个网站时,我们需要处理很多表单,有注册和登录的表单,用户和管理员得表单,这些都要分开处理,改如何实现呢?,5,form类及其子类的实现,1 abstract class Form 2 private $classType; 3 pr

9、ivate $data; 4 public function _construct($data, DealMethod $type) 5 $this-data = $data; 6 $this-classType = $type; 7 8 public function deal() 9 return $this-classType-deal($this); 10 11 public function getData() 12 return $this-data; 13 14 15 class User extends Form 16 class Admin extends Form,处理方式

10、类与子类,22 abstract class DealMethod 23 abstract public function deal(Form $form); 24 /返回实例的类型 25 abstract public function formType(); 26 27 class RegisterForm extends DealMethod 28 public function deal(Form $form) 29 30 return $form-getData().已插入数据库; 31 32 public function formType() 33 34 return 注册; 3

11、5 36 37 class LoginForm extends DealMethod 38 public function deal(Form $form) 39 40 return $form-getData().已插入数据库; 41 42 public function formType() 43 44 return 登录; 45 46 ,调用Form类及其子类,调用代码,47 $forms = new User(dpriest, new RegisterForm() ); 48 $forms = new Admin(admin, new LoginForm() ); 49 foreach

12、 ( $forms as $form) 50 print $form-deal(); 51 print $form-getData(); 52 ,好处,使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关系自己处理的是单个对象还是整个组合结构,这就简化了客户端代码。 更容易在组合体内加入对象部件. 客户端不必因为加入了新的对象部件而更改代码。,3.单例模式,在贪吃蛇的游戏中,游戏中的果子始终只有一个,如何在面向对象中实现这种效果呢而不会因为多对像同时调用产生偏差呢?用单例模式可以很好地解决这个问题。 对单例类的所有实例化得到的都是相同的一个实例。这个模式也提供一个私有的抽

13、象类来访问这个类的实例。,使用静态方法和静态属性来间接实例化对象,1 class Preferences /建一个不能在外部创建实例的类,因为构造方法是私有 2 private $props=array();/私有的属性数组 3 private static $instance;/私有的属性 4 5 private function _construct() /这样的构造方法决定了这个类不能在外部实例化 6 7 public static function getInstance()/静态的创建自身的实例并返回对象的方法 8 if (empty(self:$instance) 9 self:$

14、instance=new Preferences();/静态的创建自身的实例并返回对象 10 11 return self:$instance;/静态的创建自身的实例并返回对象 12 13 public function setProps($key,$val)/普通公用方法 14 $this-props$key=$val; 15 16 17 public function getProps($key)/普通会用方法 18 return $this-props$key; 19 20 ,调用代码,21 $pref=Preferences:getInstance(); 22 $pref-setPro

15、ps(“name”,”matt“); 23 unset($pref);/移除引用 24 25 $pref2=Preferences:getInstance(); 26 echo $pref2-getProps(“name”);,输出依然是“matt” 为什么? 原因很简单,在实例化第一个对象的时候,通过$pref- setProps(“site”,”matt“);语句设置了 Preferences 类的 $props 数组,然后获取第二个对象的时候,”if (empty(self:$instance)”这个语句进行了判断,如果存在该属性,就把这个属性赋值给新对象。相关语句是:self:$ins

16、tance=new Preferences();当$pref2=Preferences:getInstance();的时候,因为已经被实例化过一次,所以self:$instance是存在的。返回的是有属性值的对象,所以这个值会依然存在。,通过以上的分析,单例模式的特征如下: 如果A对象和B对象全是Preferences类的实例,那么,A对象可以设置Preferences的一个属性,而B 对象不用设置就可以调用这个属性的值,这种方法可以从某种程度上 变成了一个特殊的全局变量模式,然而又避免了全局变量在程序的设计过程中所带来的类似冲突这样的不必要的麻烦。,单例模式的优缺点,单例模式的优点: 1,实

17、例控制:单例模式防止其它对象对自己的实例化,确保所有的对象都访问一个实例。 2,伸缩性:因为由类自己来控制实例化进程,类就在改变实例化进程上有相应的伸缩性。 单例模式的缺点: 1,系统开销。虽然这个系统开销看起来很小,但是每次引用这个类实例的时候都要进行实例是否存在的检查。这个问题可以通过静态实例来解决。 2,开发混淆。当使用一个单例模式的对象的时候(特别是定义在类库中的),开发人员必须要记住不能使用new关键字来实例化对象。因为开发者看不到在类库中的源代码,所以当他们发现不能实例化一个类的时候会很惊讶。 3,对象生命周期。单例模式没有提出对象的销毁。在提供内存管理的开发语言(比如,基于.NetFramework的语言)中,只有单例模式对象自己才能将对象实例销毁,因为只有它拥有对实例的引用。在各种开发语言中,比如C+,其它类可以销毁对象实例,但是这么做将导致单例类内部的指针指向不明。,The End,目录 1.面向对象思想 2.模式原则 3.生成对象 TCP三次握手 拓展:tcp各种连接状态 拓展:长连接 路由 网络地址转换(NAT) SNAT/DNAT netfilter iptables 三、生成对象,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1