没有合适的资源?快使用搜索试试~ 我知道了~
设计模式总结 考试复习资料
5星 · 超过95%的资源 需积分: 32 60 下载量 101 浏览量
2014-05-03
09:58:34
上传
评论 1
收藏 1.33MB PDF 举报
温馨提示
本系列主要记录设计模式的意图是什么,它要解决一个什么问题,什么时候可以使用它;它是如何解决的,掌握它的结构图,记住它的关键代码;能够想到至少两个它的应用实例,一个生活中的,一个软件中的;这个模式的优缺点是什么,其有哪些使用场景,在使用时要注意什么。">本系列主要记录设计模式的意图是什么,它要解决一个什么问题,什么时候可以使用它;它是如何解决的,掌握它的结构图,记住它的关键代码;能够想到至少两个它的应用实例,一个生活中的,一个软件中的;这个模式的优缺 [更多]
资源推荐
资源详情
资源评论
设计模式总结
创建时间:2014/03/19 10:13
更新时间:2014/05/03 09:51
作 者:hacke2
来 源:http://blog.csdn.net/hacke2
本系列主要记录设计模式的意图是什么,它要解决一个什么问题,什么时候可以使用它;它是如何解决
的,掌握它的结构图,记住它的关键代码;能够想到至少两个它的应用实例,一个生活中的,一个软件中
的;这个模式的优缺点是什么,其有哪些使用场景,在使用时要注意什么。
来自 晔阳的博客 blog.csdn.net/hacke2
1.单例模式
意图
:保证一个类仅有一个实例,并提供一个访问它的全局访问点
主要解决
:生产一系列产品
什么时候使用
:当你想控制实例数目,节省系统资源的时候
如何解决
:判断系统是否是否已经有这个单例,如果有则返回,如果没有,则创建
结构图
:
关键代码
:构造函数式私有的
应用实例
:1.一个党只能有一个主席.2.Windows是多进程多线程的,在操作一个文件的时候,就不可避免
地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。3.一些
设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打
印同一个文件。
优点:
1.在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页
面缓存) 2.避免对资源的多重占用(比如写文件操作)
缺点:
没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,儿不关心外面怎么样来
实例化
使用场景:
1.要求生产唯一序列号 2.WEB中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存
起来 3.创建的一个对象需要消耗的资源过多,比如I/O与数据库的连接等
注意事项:
getInstance()方法中需要使用同步锁synchronized (Singleton.class)防止多线程同时进入造成
instance被多次实例化
2.工厂模式
意图
:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到
子类进行
主要解决
:主要解决接口选择的问题
什么时候使用
:我们明确的计划不同条件下创建不同实例时
如何解决
:让其子类实现工厂接口,返回的也是一个抽象的产品
结构图
:
关键代码
:创建过程在其子类执行
应用实例
:1.你需要一辆汽车,你可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这
个汽车里面的具体实现 2.Hibernate换数据库只需换方言和驱动就可以
优点:
1.一个调用者想创建一个对象,只要知道其名称就可以了 2.扩展性高,如果想增加一个产品,只要扩
展一个工厂类就可以 3.屏蔽产品的具体实现,调用者只关心产品的接口
缺点:
每次增加一个产品时,都需要增加一个具体类和对象实现工厂,是的系统中类的个数成倍增加,在
一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。
使用场景:
1.日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到
什么地方。2.数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时3.设计一个
连接服务器的框架,需要三个协议,"POP3", "IMAP", "HTTP",可以把这三作为产品类,共同实现一个接
口
注意事项:
作为一种创建类模式,在任何需要生成
复杂对象
的地方,都可以使用工厂方法模式。有一点需
要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过new就可以完成创建的对
象
,
无
需
使
用
工
厂
模
式
。
如
果
使
用
工
厂
模
式
,
就
需
要
引
入
一
个
工
厂
类
,
会
增
加
系
统
的
复
杂
度
。
3.抽象工厂
意图
:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
主要解决
:主要解决接口选择的问题
什么时候使用
:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品
如何解决
:在一个产品族里面,定义多个产品
结构图
:
关键代码
:在一个工厂里聚合多个同类产品
应用实例
:工作了,为了参加一些聚会,肯定有两套或多套衣服吧,比如说有商务装(成套,一系列具体
产品)、时尚装(成套,一系列具体产品),甚至对于一个家庭来说,可能有商务女装、商务男装、时尚
女装、时尚男装,这些也都是成套的,即一系列具体产品.咱们假设一种情况(现实中是不存在的,要不然,没
法进入共产主义了,但有利于说明抽象工厂模式),在你的家中,某一个衣柜(具体工厂)只能存放某一种这
样的衣服(成套,一系列具体产品),每次拿这种成套的衣服时也自然要从这个衣柜中取出了.用OO的思想
去理解,所有的衣柜(具体工厂)都是衣柜类的(抽象工厂)某一个,而每一件成套的衣服又包括具体的
上衣(某一具体产品),裤子(某一具体产品),这些具体的上衣其实也都是上衣(抽象产品),具体的
裤子也都是裤子(另一个抽象产品).
优点:
1当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对
象。
缺点:
产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的Creator里加代码,又要在具体的
里面加代码
使用场景:
1.QQ换皮肤,一整套一起换 2.生成不同操作系统的程序
注意事项:
产品族难扩展,产品等级易扩展
4.建造者模式
意图
:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
主要解决
:主要解决在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子
对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们
组合在一起的算法确相对稳定。
什么时候使用
:一些基本部件不会变,而其组合经常变化的时候
如何解决
:将变与不变分离开
结构图
:
关键代码
:建造者:创建和提供实例,导演:管理建找出来的实例的依赖关系
应用实例
:1.去肯德基,汉堡,可乐,薯条,炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓
的“套餐”2.JAVA中的StringBuilder
优点:
1建造者独立,易扩展 2.便于控制细节风险
缺点:
1.产品必须有共同点,范围有限制 2.如内部变化复杂,会有很多的建造类
剩余21页未读,继续阅读
资源评论
- yaoxiaoci2015-09-13还不错,估计得好好看看补补知识了。总结的还好,点赞
- 凡哥1112015-07-28很不错的考试复习题
hacke2
- 粉丝: 240
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功