设计模式应用有感总结
设计模式应用有感总结
1、桥接设计模式
(1)从形式上看,就是将一个抽象(接口)作为成员变量放入另一个抽象类中,以实现【抽象与实现的解耦】,这样ImplementorImpl
与AbstractImpl
可以各自做自己的事情而互不影响,可以独立变化,而又自由组合。有点类似对象的链接。接口实现对象一般都是通过抽象类继承类构造函数参数传进去,构造函数参数决定桥接的是哪个实现接口的对象,然后由实现接口的对象执行任务。
2、代理设计模式
(1)代理类可以对委托类进行功能扩展,所以当需要对某个类功能(操作或方法)进行扩展时可以使用代理模式
3、享元模式
基本介绍
(1)享元模式,又称蝇量模式:
(2)运用共享技术实现大量细粒度对象的复用
应用
(1)享元模式是池技术的重要实现方式
(2)池技术:String 常量池、数据库连接池、缓冲池
(3)常用于系统底层开发,解决系统的性能问题:如数据库连接池,池中是创建好的连接对象,若池中有符合需求的对象时直接用,避免重新创建;若池中没有符合需求的,则创建一个
要求
(1)细粒度、共享对象
(2)将对象的信息分为两个部分
(1)内部状态:指对象共享出来的信息,存储在享元对象内部且不会随环境的改变而改变的状态
(2)外部状态:指对象得以依赖的一个标记,是随环境改变而改变的、不可共享的状态
角色
(1)FlyWeight:抽象的享元角色,产品的抽象类,定义了对象的外部状态和内部状态的接口或实现
(2)ConcreteFlyWeight:具体的享元角色,产品的实现类,实现了抽象角色定义的相关业务
(3)UnSharedConcreteFlyWeight:不可共享的角色,一般不会出现在享元工厂中
(4)FlyWeightFactory:享元工厂类,内部提供一个池容器,储存ConcreteFlyWeight,同时提供从池中存取数据的操作
事项
(1)享:共享,元:对象
(2)应用场景:系统中有大量对象,这些对象消耗大量内存,并且对象的状态大部分可以外部化时
(3)一般用 HashMap / HashTable 存储 ConcreteFlyWeight,key作为唯一标识码判断 ConcreteFlyWeight
(4)优点
(1)解决重复对象的内存浪费的问题,减少了对象的创建,降低了程序内存的占用,提高效率
(2)提高了系统的复杂度,需要分离出内部状态和外部状态
(5)缺点
(1)提高了系统的复杂度,需要分离出内部状态和外部状态。而外部状态具有固化特性,不应该随着内部状态的改变而改变
(2)享元模式需要额外维护对象缓存池。
(6)例子
春运买火车票是一件疯狂的事情,同一时刻会有大量的查票请求涌向服务器,服务器必须做出应答来满足我们的购票需求。试想,这些请求包含着大量的重复,比如从A地到B地的车票情况,如果每次都重复创建一个车票查询结果的对象,那么GC任务将非常繁重,影响性能,这就用到了我们的享元模式。当然也会有不重复的请求,比如我想购买从A地到B地的高铁票,而你想买从A地到B地的动车票。
4、命令模式
定义:命令是对命令的封装,每一个命令都是一个操作,请求方发出请求,接收方接收请求,并执行操作。命令模式解耦了请求方和接收方,命令模式属于行为型模式
命令模式中的4个角色:
(1)接收者角色(Receiver):负责具体执行一个请求(真正执行命令的对象)
(2)命令角色(ICommand):定义需要执行的所有命令行为
(3)具体的命令角色(ConcreteCommand):内部维护一个Receiver
(4)请求者角色(Invoker):接收客户端的命令,并执行命令
例如:客户端把命令给Invoker.setCommand,然后Invoker执行命令Invoker.execute
例子 :遥控操作电视
5、责任链模式
责任链模式的优点如下:
(1)降低了对象之间的耦合度
发送者无需知道最终由哪一个handler处理其请求,也无需知道请求的传递过程
handler无需知道是哪一个发送者发送的请求,就像奖学金评选系统一样,本科生、研究生和博士生都可能是申请者
(3)增强了系统的可扩展性
如果新增handler无需修改请求者的代码逻辑,满足开闭原则
(4)增强了给对象指派职责的灵活性
随着工作流程的变化,可以动态地改变链内的handler、可以动态地调整handler的次序,还可以动态地增加或删除handler
(5)简化了对象之间的连接
每个对象只需保持一个指向其后继者的next引用,不需保持其他所有处理者的引用,避免了使用众多的 if···else 语句。
(6)责任分担
每个handler只需要处理自己分内的工作,分外的工作可以传递给下一个handler去完成
这样的话,每个handler的分工明确,符合类的单一职责原则
自己对增强了给对象指派职责的灵活性的理解
以请假审批为例,使用list记录责任链
可以通过set操作,将组长换成方向负责人
可以通过swap操作,调整部长和总监的审批顺序(不太恰当的例子
设计模式应用有感总结相关推荐
- 读《大话设计模式》有感
昨天拿到了<大话设计模式>一书,竟然一口气读到第15章,这在我看过的书中还是没有的.这本书出来也有半年多了,之所以现在才买来读,这其中也是有原因的. 早在这 ...
- 设计模式原则总结--读《大话设计模式》有感 转
读了<大话设计模式>,摘录该书中讲到的设计模式几大原则,供日后使用. 一.单一职责原则 就一个类而言,应该仅有一个引起它变化的原因.如果一个类承担的职责过多,就等于把这些职责耦合在一起,一 ...
- python判断是否为整数的函数_实现函数 isInteger(x) 来判断 x 是否是整数
Python开发程序:选课系统-改良版 程序名称: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linu ...
- 看 设计模式之策略模式探讨初步 有感,并摘取部份内容,学习之
原文 http://www.cnblogs.com/changhai-xuri/archive/2006/11/24/571089.html 使用模式最好的方式是:「把模式装进脑子中,然后在你的设计和 ...
- 浅谈javascript继承【读javascript设计模式第四章节继承有感】
javascript继承,无任是类式继承,原型式继承还是渗元式继承都是通过不同方法去围绕着prototype转,简单分析下三种不同继承方法是如何围绕prototype转的 一:类似继承,先上关键代码 ...
- 小菜学习设计模式(五)—控制反转(Ioc)
写在前面 设计模式目录: 小菜学习设计模式(一)-模板方法(Template)模式 小菜学习设计模式(二)-单例(Singleton)模式 小菜学习设计模式(三)-工厂方法(Factory Metho ...
- 【游戏设计模式】之三 状态模式、有限状态机 Unity版本实现
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/52824776 作者:毛星云(浅 ...
- Java中23种设计模式(随时不定时更新)
一.创建型模式 1.单例模式(Singleton Pattern) 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种模式涉及到一个单一的类,该类负责创建自己的对 ...
- 设计模式---观察者模式(Observer)和委托事件模型(DEM)
1 引言 观察者模式,又名发布订阅模式,是一个一对多的关系,当被观察者发生某种变化,对应其观察者做出相应的改变.比如说,某学校研究生实验室有2个学生,2个学生某个上午在实验室,A在玩游戏,B在看电影, ...
最新文章
- 愈学习愈发现自己的无知
- 数据库中的实体、元组、字段、属性、码、分量、依赖关系、完全部份传递依赖、范式等你了解吗?【笔记自用】
- 自动事务_JDBC进阶(二)事务编程
- hive开启kerberos-beeline连接
- 论文阅读:Spatial context-aware network for salient object detection
- 基于Ajax的应用程序架构汇总(一) (转自CSDN)
- matplotlib库使用
- vs哪个版本比较好用_哪个跨境电商erp比较好用,跨境电商erp哪个好一点
- cad卸载_3分钟搞定CAD无法卸载问题,CAD卸载不再是烦恼
- 鸿蒙系统怎么在桌面添加小程序,从微信小程序到鸿蒙JS开发-menutoastdialog
- 一个参数在注塑行业的影响——“停留时间”
- CORTEX-M4F基本知识
- 当酒品牌遇上爱“微醺”的年轻人,会擦出怎样的火花?
- 爱普生Epson Stylus Photo T60 打印机驱动
- python变量的声明和赋值
- 正则表达式(二)常用正则表达式——验证邮箱
- vue3 watchEffect用法以及清除副作用
- 台式计算机可以接收无线不,台式电脑无线接收器插上连不上网怎么处理
- 11套宝藏特效视频素材大约263GB 免费分享
- Linux下WPS相关命令——et,wps,wpp