设计模式应用有感总结

1、桥接设计模式

(1)从形式上看,就是将一个抽象(接口)作为成员变量放入另一个抽象类中,以实现【抽象与实现的解耦】,这样ImplementorImplAbstractImpl可以各自做自己的事情而互不影响,可以独立变化,而又自由组合。有点类似对象的链接。接口实现对象一般都是通过抽象类继承类构造函数参数传进去,构造函数参数决定桥接的是哪个实现接口的对象,然后由实现接口的对象执行任务。

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操作,调整部长和总监的审批顺序(不太恰当的例子

设计模式应用有感总结相关推荐

  1. 读《大话设计模式》有感

           昨天拿到了<大话设计模式>一书,竟然一口气读到第15章,这在我看过的书中还是没有的.这本书出来也有半年多了,之所以现在才买来读,这其中也是有原因的.          早在这 ...

  2. 设计模式原则总结--读《大话设计模式》有感 转

    读了<大话设计模式>,摘录该书中讲到的设计模式几大原则,供日后使用. 一.单一职责原则 就一个类而言,应该仅有一个引起它变化的原因.如果一个类承担的职责过多,就等于把这些职责耦合在一起,一 ...

  3. python判断是否为整数的函数_实现函数 isInteger(x) 来判断 x 是否是整数

    Python开发程序:选课系统-改良版 程序名称: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linu ...

  4. 看 设计模式之策略模式探讨初步 有感,并摘取部份内容,学习之

    原文 http://www.cnblogs.com/changhai-xuri/archive/2006/11/24/571089.html 使用模式最好的方式是:「把模式装进脑子中,然后在你的设计和 ...

  5. 浅谈javascript继承【读javascript设计模式第四章节继承有感】

    javascript继承,无任是类式继承,原型式继承还是渗元式继承都是通过不同方法去围绕着prototype转,简单分析下三种不同继承方法是如何围绕prototype转的 一:类似继承,先上关键代码 ...

  6. 小菜学习设计模式(五)—控制反转(Ioc)

    写在前面 设计模式目录: 小菜学习设计模式(一)-模板方法(Template)模式 小菜学习设计模式(二)-单例(Singleton)模式 小菜学习设计模式(三)-工厂方法(Factory Metho ...

  7. 【游戏设计模式】之三 状态模式、有限状态机 Unity版本实现

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/52824776 作者:毛星云(浅 ...

  8. Java中23种设计模式(随时不定时更新)

    一.创建型模式 1.单例模式(Singleton Pattern) 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种模式涉及到一个单一的类,该类负责创建自己的对 ...

  9. 设计模式---观察者模式(Observer)和委托事件模型(DEM)

    1 引言 观察者模式,又名发布订阅模式,是一个一对多的关系,当被观察者发生某种变化,对应其观察者做出相应的改变.比如说,某学校研究生实验室有2个学生,2个学生某个上午在实验室,A在玩游戏,B在看电影, ...

最新文章

  1. 愈学习愈发现自己的无知
  2. 数据库中的实体、元组、字段、属性、码、分量、依赖关系、完全部份传递依赖、范式等你了解吗?【笔记自用】
  3. 自动事务_JDBC进阶(二)事务编程
  4. hive开启kerberos-beeline连接
  5. 论文阅读:Spatial context-aware network for salient object detection
  6. 基于Ajax的应用程序架构汇总(一) (转自CSDN)
  7. matplotlib库使用
  8. vs哪个版本比较好用_哪个跨境电商erp比较好用,跨境电商erp哪个好一点
  9. cad卸载_3分钟搞定CAD无法卸载问题,CAD卸载不再是烦恼
  10. 鸿蒙系统怎么在桌面添加小程序,从微信小程序到鸿蒙JS开发-menutoastdialog
  11. 一个参数在注塑行业的影响——“停留时间”
  12. CORTEX-M4F基本知识
  13. 当酒品牌遇上爱“微醺”的年轻人,会擦出怎样的火花?
  14. 爱普生Epson Stylus Photo T60 打印机驱动
  15. python变量的声明和赋值
  16. 正则表达式(二)常用正则表达式——验证邮箱
  17. vue3 watchEffect用法以及清除副作用
  18. 台式计算机可以接收无线不,台式电脑无线接收器插上连不上网怎么处理
  19. 11套宝藏特效视频素材大约263GB 免费分享
  20. Linux下WPS相关命令——et,wps,wpp

热门文章

  1. 爬虫之request模块
  2. 修改新人出生点,以及修改死亡复活点的方法
  3. 理解Hive表(Hive Table)
  4. 第二章 CortexM3/M4基础
  5. PBI 自如公共数据展示
  6. 微信公众号、微信小程序的同时开发
  7. 高斯分布的各阶中心距和原点矩超强总结
  8. Springboot毕设项目基于人脸识别的智能门禁及考勤系统11f4gjava+VUE+Mybatis+Maven+Mysql+sprnig)
  9. 一木.溪桥学Python-10:函数闭包、装饰器、推导式
  10. android查询联系人的电话号码,获取sim卡联系人电话号码