郑州大学软件学院设计模式

上传人:小** 文档编号:55130649 上传时间:2018-09-25 格式:PPT 页数:80 大小:814.50KB
返回 下载 相关 举报
郑州大学软件学院设计模式_第1页
第1页 / 共80页
郑州大学软件学院设计模式_第2页
第2页 / 共80页
郑州大学软件学院设计模式_第3页
第3页 / 共80页
郑州大学软件学院设计模式_第4页
第4页 / 共80页
郑州大学软件学院设计模式_第5页
第5页 / 共80页
点击查看更多>>
资源描述

《郑州大学软件学院设计模式》由会员分享,可在线阅读,更多相关《郑州大学软件学院设计模式(80页珍藏版)》请在金锄头文库上搜索。

1、备忘录模式,P188 Memento mment 意图 在不破坏封装性的前提下,捕获一个对象的内部状态 并在该对象之外保存这个状态 便于以后的恢复,例子,打游戏 打怪之前满满的红、蓝、装备 先保存最佳状态 如果打怪不成功,可以回到这个状态重新开始,红框内细节暴露,客户端 职责过多,用一个备忘录保存状态,红框内细节暴露,客户端 职责过多,用一个备忘录保存状态,缺点,高层有了过多的责任 细节暴露 解决方法: 完整的备忘录模式,Client所关心的,创建备份点,需要的时候恢复 不关心是怎样的备忘录 或者有多个备忘 建立一个管理者来管理备忘录,而客户端只跟管理者联系,例子,回到过去 有个男孩 有一天遇

2、到一个女孩,于是他状态特别好。 之后的相处中,慢慢吵架、冷战。 他想回到那天与女孩相遇的状态,抽象工厂,暴力摩托(带武器Weapon) 游戏的两种模式: 普通模式:开摩托、手拿AK47 魔法模式:骑扫把、手拿魔法棒,抽象工厂结构,P57 意图 P58 结构图,例子,穿衣风格 高富帅 衣服 三叶草 食物 哈根达斯 屌丝 衣服 班尼路 食物 食堂 画类图写Main入口,例子,有一个美丽的善良的姑娘 很多的追求者 追求者队伍会不断的变换 追求者最喜欢问的话“你在干嘛” 善良的姑娘不断的回复 困惑 姑娘:不断回复给很多人 追求者:不断询问,解决,用关注的方式 如果boy关注了女孩,则可以通过数据绑定方

3、法获得女孩的状态列表。 女孩会更新自己的状态,public interface IPrincess void Add(IBoy b);void Remove(IBoy b);void Notify();,public class SnowWhite implements IPrincess String state;ArrayList boys=new ArrayList();Overridepublic void Add(IBoy b) boys.add(b);Overridepublic void Remove(IBoy b) boys.remove(b);Overridepublic v

4、oid Notify() for(IBoy b:boys)b.Update();,public interface IBoy void Update(); ,public class Qiang implements IBoy Overridepublic void Update() System.out.println(“小强说状态已更改“);,public class Cai implements IBoy Overridepublic void Update() System.out.println(“状态已更改-Cai“);,public class XiaoMing public s

5、tatic void main(String args) IBoy qiang=new Qiang();IBoy cai =new Cai();SnowWhite sw=new SnowWhite();sw.Add(qiang);sw.Add(cai);sw.state =“吃饭“;sw.Notify();,练习,订阅新闻 有个新闻自动发布系统,用户可以订阅或取消订阅该系统,当该系统有新内容时,会通知给订阅它的用户。 订阅用户可以通过update方法,获得新闻更新。 画类图,写完整代码,public interface INews void Add(IUser u);void Remove(I

6、User u);void Notify(); ,public interface IUser void Update(); ,public class Seven implements IUser Overridepublic void Update() System.out.println(“我的新闻列表已更新-Seven“);,public class News implements INews public String title,contex;ArrayList myUsers=new ArrayList();Overridepublic void Add(IUser u) myUs

7、ers.add(u);Overridepublic void Remove(IUser u) myUsers.remove(u);Overridepublic void Notify() for(IUser u:myUsers)u.Update();,public class XiaoMing public static void main(String args) IUser seven =new Seven();News news=new News();news.Add(seven);news.title=“新标题“;news.contex=“新内容“;news.Notify();,P20

8、1 State 意图 允许一个对象在其内部改变时改变它的行为,对象看起来似乎修改了它的类 若一个对象有多种状态,则将它的状态封装成对象,需要的时候,在对象间进行变换。,状态模式,打游戏的幸福状态,例子,Normal,吐,Mad,38,复习,Composite组成模式P107 意图 用途 大多用在会产生树形结构图的程序中 例如:菜单的生成、公司与分公司的扩展等 Decorator装饰者模式 P115意图 动机 有时候我们希望给某个对象,而不是整个类添加功能。,外观模式,Facade fs:d P121 意图 为子系统中的一组接口提供一个一致的界面 Faade模式定义了一个高层接口,例子,有关家务

9、活的子系统,子系统,做饭,买菜,打酱油,拖地,夸奖对方,洗衣,女友,男友,亲戚,43,问题,客户端与子系统造成过多的依赖 一旦子系统内部有更改 无可避免客户端也要有相应的更改 怎么办? P122 图,子系统,做饭,买菜,打酱油,拖地,夸奖对方,洗衣,男友,女友,亲戚,Facade,例子,医院的系统 子系统:挂号、看病、化验、缴费、取药 不同的病人对应不同的子系统 比如:一般病人:挂号、看病 严重一些:挂号、看病、取药 更严重一些:挂号、看病、化验、缴费 使用外观模式,代码,代码,Faade模式系统图,P122,Faade模式使用场合,P123 当为一个复杂子系统提供一个简单的接口 客户程序与抽

10、象类的实现部分之间存在很大的依赖性 当需要构件一个层次结构的子系统时,Faade结构图,P123,Faade的优缺点,讨论 优点:降低耦合、减少风险 缺点:严重不符合开闭原则,练习,有关银行借贷系统 子系统:银行、信誉、抵押物、人品测试、银行卡等 不同的行为调用不同的子系统 如取钱:银行、银行卡 贷款:银行、信誉、抵押物、人品测试 尝试用Facade模式融合代码,要求画类图、写Facade类的代码,复习,Facade fs:d P121 意图 为子系统中的一组接口提供一个一致的界面 Faade模式定义了一个高层接口,Faade模式系统图,P122,Faade模式使用场合,P123 当为一个复杂

11、子系统提供一个简单的接口 客户程序与抽象类的实现部分之间存在很大的依赖性 当需要构建一个层次结构的子系统时,主要内容,Prototype 原型模式 创建型模式的大复习,例子,抄作业 以为好学生写完了作业 其他同学直接复制 把作业的姓名和学号改为自己的姓名学号,作业类,Main入口(Client端),问题,若抄份作业需要1小时,那么10份作业需要? 想要得到对象时间太久(对象的创建过程较为复杂并且有时候需要频繁创建),如何解决? 使用原型模式!Prototype pruttaip 使作业产生副本,其余同学使用副本对象当自己的作业。,Java班,Net班,如何产生副本-NET,任何一个类都有一个方

12、法MemberwiseClone(),可以得到副本对象 浅复制(复制值类型,引用类型复制地址) 深复制给有兴趣的同学去了解,HomeWork更改-C#,Main更改-C#,如何产生副本-JAVA,super.clone() 可以得到当前调用类的对象的副本 浅复制(复制值类型,引用类型复制地址) 深复制给有兴趣的同学去了解,HomeWork更改-JAVA,JAVA中clone注意!,在JAVA中需要被克隆的对象必须实现Cloneable接口 否则视为不合法,会抛出不支持克隆的异常! 实现接口后, clone执行的时候使用RTTI(run-time type identification)机制,动

13、态得找到目前正在调用clone方法的引用,根据它的大小申请内存空间,实现浅复制。,Main更改-JAVA,原型模式,使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。,行为模式,P147 设计到算法和对象间职责的分配 注意: 行为模式都有自己的优缺点 要宽容使用,责任链模式,P147 Chain Of Responsibility 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。 将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止,例子,请假 请假一节课 班长 离校1-2天 辅导员 请求退出学院 院长,72,75,责任链模式,客户端不必关心谁帮他解决了问题 只传递愿望,责任链模式,优点: 最显著的优点就是将请求和处理分开 请求者可以不用知道是谁处理的 不用知道请求的全过程 低耦合 灵活度高,责任链模式,缺点: 性能降低 无论何种请求,都是从链头遍历到链尾 调试不便,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 宣传企划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号