设计模式之禅读书笔记

》设计原则《

》Single Responsibility Principle(单一职责原则)类只有一个修改的原因。

  ●类的复杂性降低,实现什么职责都有明确的定义。

  ●可读性高

  ●可维护性高

  ●变更引起的风险降低。

PS:基本不可能实现

》里氏替换原则:只要父类可以出现的地方,子类就可以出现。

》Dependence  Inversion Principle(依赖倒置原则)

  ●高层次模块不应该依赖低层模块,两者都应该依赖抽象。

  ●抽象不应该依赖细节,细节应该依赖抽象

》接口隔离原则:类之间的依赖关系应该建立在最小的接口上。

》迪米特法则:一个对象应该对其他对象有最少的理解。

》开闭原则:对扩展开放,对修改关闭。

  ●逻辑变化

  ●子模块变化

  ●可见视图变化

设计模式

》单例模式(Singleton Pattern):要求一个类只能生成一个对象,所有对象对他的依赖都是相同的。

类图:

优点:

  ●较少了内存开支,性能开销。避免对资源的多重占用。

  ●优化和共享资源访问。

缺点:

  ●扩展困难。对测试不利。

使用场景:

  ● 生成唯一序列号的环境。

  ●需要一个共享的访问点或共享数据。如web上的计数器。

  ●创建对象需要耗费的资源过多。如访问IO资源。

注意事项:

  ●线程同步的问题。

最佳实现:

  ● 在Spring中,每个Bean默认都是单例的。

》工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个对象。

类图:

优点:

  ●良好的封装。代码结构清晰。

  ●扩展非常优秀。

  ●屏蔽产品类。

扩展:

  ● 缩小为简单工厂。

  ●升级为多个工厂类。

  ●替代单例模式

  ●延迟初始化。

》抽象工厂模式:为创建一组相关或依赖的对象提供一个接口,却无需指定它们的具体类。

类图:

优点:

  ●封装性,工厂类创建需要的对象。

  ●产品族的约束为非公开的状态。

缺点:

  ● 产品族扩展非常困难。

》模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类,使得子类可以在不改变一个算法的结构即可重新定义该算法的某些特定步骤。

类图:

  ●注:在软件开发的过程中,如果相同的代码拷贝过两次,就要对设计产生怀疑。

  ●为了防止恶意的操作,一般模板方法都加上final关键字,不如许复写。

优点:

  ●封装不变的部分,扩展可变的部分。

  ●提取公共代码,便于维护。

  ● 行为由父类控制,子类实现。

缺点:

  ●子类对父类产生了影响,会带来代码的阅读难度。

使用场景:

  ●可以把核心算法设计为模板方法。

  ●重构时,把相同的代码抽取到父类。

扩展:

  ●增加钩子方法,也就是说外界条件改变,影响到模板方法的执行。

》建造者模式:将一个复杂对象的构建与他的表示分离。是得同样的构建过程可以创建不同的表示。

  ● ArrayList和HashMap如果定义成类的成员变量,那你的方法中的调用一定要做一个clear的动作。以防数据混乱。

类图:

  ●product产品类:通常是实现了模板方法模式。

  ●Builder抽象构建者:规范产品的组件。一般由子类实现。

  ●ConcreteBuilder:实现抽象类所定义的方法,并返回一个组建好的对象。

  ●Director导演:负责安排已有的顺序。起到封装的作用。

优点:

  ●可以使客户端不必知道产品内部组成的细节。

  ●建造者独立,容易扩展。

  ● 便于控制细节。

使用场景:

  ●相同的方法,不同的执行顺序,产生不同的结果。

  ●多个部件,都可以装配到一个对象中,但是产生的运行结果有不同。

  ●产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能。

》代理模式:为其他对象提供一个代理以控制这个对象的访问。

类图:

  ●subject主题角色:普通的业务类型定义。

  ● Realsubject:业务逻辑的具体执行者。

  ●proxy:调用真实的类。

优点:

  ● 职责清晰,真实的角色实现实际的业务逻辑。不必关心其他的事情。

  ● 高扩展性:不管具体的主题如何变化,代理类都可以不用变。

注:String AOP是一个典型的动态代理的应用。

》》原型模式:用原型实例指定创建对象的种类。并且通过拷贝这些原型创建新的对象。

类图:

优点:

  ●  性能优良,原型模式是二进制流的拷贝,要比直接new一个性能好的多。

  ● 逃避构造函数的约束。

注:执行拷贝的时候不会运行构造函数。

  ● 浅拷贝:clone只拷贝本对象,其对象内部的数组,引用对象不拷贝。

注:在使用原型模式的时候,引用的成员变量必须是成员变量与是一个可变的引用变量才不会被拷贝。

  ●深拷贝:把引用变量单独拷贝。

注:深拷贝与浅拷贝不要混合使用。

      对象的clone与对象的final关键字是冲突的。要是用clone方法,就不要使用final。

》》中介者模式:用一个中介对象封装一系列对象的交互,中介者使各对象不需要显示地相互作用。从而松耦合。也可以独立的改变他们之间的交互。

类图:

  ●优点:减少类的依赖。降低了类之间的耦合度。

  ●缺点:中介者会膨胀的很大,逻辑复杂。

  ●MVC:C就是一个中介者。

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

 

 未完待续。。。。。。

 

转载于:https://www.cnblogs.com/skys-li/p/5363771.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql mysql_set_charset_SQL注入攻击之 mysql_set_charset [转]

本文转载地址:http://hi.baidu.com/cuttinger/blog/item/e9a93901934755147bec2cb0.html1。老话题,mysql_real_escape_string单引号,大多数情况下,防止sql注入攻击足够了。$mysql mysql_connect("host","user&quo…

idea导入maven项目依赖报错_解决Maven依赖冲突的好帮手,这款IDEA插件了解一下?

1、何为依赖冲突Maven是个很好用的依赖管理工具,但是再好的东西也不是完美的。Maven的依赖机制会导致Jar包的冲突。举个例子,现在你的项目中,使用了两个Jar包,分别是A和B。现在A需要依赖另一个Jar包C,B也需要依赖C。但…

java线程创建方式_Java创建线程安全的方法

原文链接 译者:秦建平 校对:方腾飞首先来看一个问题:下面这个方法是线程安全的吗?如何才能让这个方法变成线程安全的?public class MyCount {private static int counter 0;public static int getCount(){return coun…

win7 能下node什么版本_微软从未公开的win10版本,3GB+极度精简,老爷机有救了

在windows家族中,最好用的就是win7和XP系统。堪称经典,而且还是发展最成功的系统版本。前几天韩博士也发布一篇关于XP系统的文章,评论区引发极大争论。大家众说纷纭,觉得XP系统是顺畅,但是很多软件硬件都不支持&#x…

【Swift学习】Swift编程之旅(一)

学习一门新语言最经典的例子就是输出“Hello World!” print("Hello World!")  swift就是这样来输出的。 如果你使用过其他语言,那么看上去是非常的熟悉吧。但比一些c要简单的多吧 1、不需要导入一些单独的库,比如输入/输出或字符…

孔夫子二手书采集

文章目录 项目演示软件采集单本数据网页搜索数据对比 使用场景概述部分核心逻辑Vb工程图数据导入与读取下拉框选择参数设置线程 使用方法下载软件授权导入文件预览处理后的数据 项目结构附件说明 项目演示 操作视频详见演示视频,以下为图文演示 软件采集单本数据 …

为什么用redis做缓存而不是mybatis自带的缓存_如何用Java设计一个本地缓存,涨姿势了...

最近在看Mybatis的源码,刚好看到缓存这一块,Mybatis提供了一级缓存和二级缓存;一级缓存相对来说比较简单,功能比较齐全的是二级缓存,基本上满足了一个缓存该有的功能。当然如果拿来和专门的缓存框架如ehcache来对比可能…

process 类 java_编写可执行jar——java的Process类的使用(二)

你知道怎么在控制台使用ping吗?那你知道怎么在java中使用ping吗?1.批处理文件批处理文件大家一定不陌生。接触最多的应该就是tomcat中的start.bat或者start.sh了。bat是在windows环境下运行的批处理文件,sh则是linux的shell脚本。2.adb指令安…

2782: [HNOI2006]最短母串

2782: [HNOI2006]最短母串 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 3 Solved: 2[Submit][Status][Web Board]Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,…

c java 内部类_java程序中能否在内部类当中再定义一个内部类?

展开全部我被你的想62616964757a686964616fe78988e69d8331333363386664法震撼了,哈哈.亏你想的出来...这么弄代码不好理解,Java看起来醒目,也是Java中的一个规范!可以吗?必须可以..看代码演示...声明下,我也第一次,多次嵌套,看你想法后去试验下是可行的我用的两种办法!不多说看…

数据库分区分表以及读写分离

谈谈怎么实现Oracle数据库分区表 Oracle数据库分区是作为Oracle数据库性能优化的一种重要的手段和方法,做手头的项目以前,只聆听过分区的大名,感觉特神秘,看见某某高手在讨论会上夸夸其谈时,真是骂自己学艺不精&#x…

JSP Workshop

http://www.cnblogs.com/ITtangtang/p/4126395.html 发现http://www.tutorialspoint.com/里的资料很全也很不错啊! 资料:http://www.tutorialspoint.com/jsp/jsp_tutorial.pdf 另外,http://www.runoob.com/jsp/jsp-tutorial.html 中关于JSP…

h5页面不可 移动_H5营销|为什么H5适合于微信营销

随着互联网技术的不断发展,更新在移动互联网时代,网络营销也开始越来越新颖化,而微信H5就是其中的佼佼者。它的出现满足了用户视觉上的审美要求,并且可以使营销方式变得更加的美观整洁,那么这里就有一个问题。为什么微…

亚太地区数学建模优秀论文_数学建模美赛强势来袭!

01美赛,即美国大学生数学建模竞赛(MCM/ICM)又要来啦!赛题内容涉及经济、管理、环境、资源、生态、医学、安全、未来科技等众多领域。竞赛要求三人(本科生)为一组,在四天时间内,就指定的问题完成从建立模型、求解、验证到论文撰写的…

《软件调试》读书笔记:第13章 硬错误和蓝屏

会话管理器进程SMSS.exe是系统启动后的第一个用户态进程,负责启动和监护windows子系统进程:CSRSS.exe和登陆管理进程:WinLogonSMSS.exe从注册表中查询子系统exe文件的位置,并且启动它 CSRSS是windows子系统进程,自NT4以…

信息安全技术网络安全等级保护定级指南_行业标准 |报业网络安全等级保护定级参考指南V2.0发布,明确保护对象、定级要求...

近期,中国新闻技术工作者联合会正式发布《报业网络安全等级保护定级参考指南V2.0》。该指南由中国新闻技术工作者联合会组织网络安全领域的专家、报业技术专家以及业务专家经过多次调研、学习、探讨后,在原《报业网络安全等级保护定级参考指南V1.0》的基…

数学作图工具_科研论文作图系列-从PPT到AI (一)

导语:之前的推送中,小编给大家介绍过几款科研作图软件,包括统计分析软件Origin和Prism,图像处理软件ImageJ等等。从本期开始,小编将和大家一起继续学习科研论文作图。重点介绍图像的处理和排版,用到的工具主…

优启通怎么重装系统win10_重装系统失败?小编教你安全给神舟战神GX9 Pro重装win10系统方法...

神舟战神GX9 Pro 上市于2016年1月,虽然现在已经停产,但是还是有不少用户依旧十分喜爱这款笔记本。这款笔记本的性能完全对得起它的售价,很多用户都反馈其比外星人电脑要好。对于爱玩游戏的用户而言,对它17.3英寸的显示屏简直欲罢不…

20135202闫佳歆--week 8 实验:理解进程调度时机跟踪分析进程调度与进程切换的过程--实验及总结...

week 8 实验:理解进程调度时机跟踪分析进程调度与进程切换的过程 1.环境搭建: rm menu -rf git clone https://github.com/megnning/menu.git cd menu ls make rootfs qemu -kernel ../linux-3.18.6/arch/x86/boot/bzImage -initrd ../rootfs.img -s -S …

java jni技术_JNI技术简介

JNI(Java Native Interface)提供一种Java字节码调用C/C的解决方案,JNI描述的是一种技术。NDK(Native Development Kit)Android NDK 是一组允许您将 C 或 C(“原生代码”)嵌入到 Android 应用中的工具,NDK描述的是工具集。 能够在 Android 应用中使用原生…