GoF的设计模式,现在看来,好象已是普遍的技术了。上至CTO,下至普通程序员,如果说某人不了解什么是设计模式,那么,这个火星了。
然而,真正用好设计模式,真正让设计模式给软件开发带来帮助的有多少?无法统计。
有人是天才,能把GoF的23个模式完全背下来。也有使用迷你手册,现用现查。但也有人捧着大部头的名著,花了大量时间,读了很久,却不得要领。比如,国内就什么在设计模式中讲孙猴子,猪八戒的,讲老子,讲周易的。林林总总。以古论今。把设计模式哲学化。实际对写代码,对软件设计有害无益。
软件本身有它特有的规律性。当然,这些规律我们确实能用哲学或其它的东西来概括。但这并不适用于所有的人。哲学化,抽象人的目的,是我们有可能进一步创建更新的模式。但回到最低层次,我们学心设计模式的根本目的是应用。而作为面向写代码的设计模式本身,只有用了,只有写了,那样的切身体会才是更加重要的。假如,将这一点也用哲学来说,那就是从理性,到感性,再到理性的过程。而绝大多数人的障硬是在:学完设计模式之后,不能运用。因而,无法得到最初的从理性到感性这一步。
所以,我认为,原理大家都会抄。对于设计模式,我们不必再多讲什么原理。而是真正引领运用之路才是根本。为此,笔者利用个人的理解,浅述一下设计模式的应用。现分述如下:
一、创建型模式——特别的变量问题
Factory Method(工厂方法):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。
实现方式:用抽象类或接口定义好各个产品的类或接口;产品抽象类可以继承,以实现不同的产品特性。从而可以实现产品系列。具体的产品继承产品抽象类。同时用抽象类定义好具体的工厂方法的类。在实现类中实现工厂方法。工厂方法以品名(产品类名)为参数,也可以用SWITCH CASE,但最好是同名模式,或表驱动法实现目标类的创建。
总结:让各种类(产品)成为变量。
选择模式:选类
附注:任何程序语言,变量类型总是相对稳定的。当然,相对于PHP,JS却是可变的。但可变是的基本类型。自定义类型是不可变的。工厂方法目标是让类型可变。
Abstract Factory(抽象工厂):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
实现方式:用抽象类或接口定义好各个产品的类或接口;产品抽象类可以继承,以实现不同的产品特性。从而可以实现产品系列。具体的产品继承产品抽象类。同时用抽象类定义好具体的对应不同系列的产品的工厂方法的类。在实现类中实现工厂方法。工厂方法以品名(产品类名)为参数,也可以用SWITCH CASE,但最好是同名模式,或表驱动法实现目标类的创建。
特性:由于工厂方法类是抽象,所以,可能继承不同的工厂方法类的实现。从而有不同的工厂方法。
总结:让有系列的各种类成为变量。并让对系列的创建也成为变量。
选择模式:选类,同时选工厂方法
附注:抽象工厂,让数据类型的变化成为二维的。
Builder(构造器):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
实现方式:定义抽象的构造器(Builder)的类,和抽象的构造器管理类Director.主体对象将构造器算法部分独立出来,通过继承抽象的构造器实现,并实现具体的构造器管理类,具体的构造器管理类,根据传入的构造器参数创建主体对象。
总结:让类的构建算法成为变量。
选择模式:选择构建算法
Prototype(原型):用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
实现方式:父类创建无数据原型,子类则添加非运行时数值或方法。使用时拷贝对应的子类原型,生成新的目标对象。
总结:类中的部分属性当成变量:类中的部分数据在变,方法的算法也在变。将不变的数据与变化的方法放入到原型子类中。
选择模式:选择半成品
Singleton(单件):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
实现方式:通过静态的getInstance方法确认类的实例是否存在,不存在则创建,然后返回这个唯一的实例对象。
总结:让有类成为超全局变量,使得一个类仅有一个实例。
选择模式:唯一性选择
分享到:
相关推荐
标题所涉及的知识点为“云计算在平面设计中的应用”。云计算是一种通过网络提供动态可伸缩的虚拟化的资源池,这些资源可以...随着技术的不断进步,云计算与平面设计的结合将更加紧密,预计会有更多创新的应用模式出现。
标题“浅述智能化技术在机械制造中的发展及应用”探讨了如何将智能化技术应用于机械制造领域,以提升我国机械制造业的水平和竞争力。随着信息化和全球化的发展,我国机械制造业正面临转型升级,寻求从传统制造模式向...
在文档的第二部分内容中,主要讨论了一个流量自动控制系统的设计和应用。该系统使用了Ls-3型仪表进行流量控制,并介绍了其参数设定、操作方法及系统效果。主要知识点包括: - 控制策略:采用负作用的控制方式,即...
本文旨在浅述基于信息化业务的高职计算机网络教学设计路径,以期为高职教育者提供有益参考。 首先,我们必须认识到当前高职计算机网络教学中存在的一些问题。例如,教学手段较为单一,多媒体展示虽然直观,但往往...
浅述混合现实技术在设计教学场景中的应用[J]. 大观, 2017(11). [3] 李婧濛. 浅谈增强现实技术(AR)在建筑领域的应用及发展[J]. 建筑工程技术与设计, 2016(1 混合现实技术的不断发展将引领我们进入一个全新的交互...
本文聚焦于人工智能在水利工程管理中的应用,旨在探索如何通过人工智能技术提升水利工程的管理效率和质量,解决传统管理模式存在的问题。 人工智能技术,简单来说,是通过技术手段模拟人类智能,实现自动化和智能化...
总的来说,当代互联网公司办公空间设计趋势不仅仅局限于提供一个办公的物理空间,更在于通过设计营造一种适合员工工作、休息、交流的环境,以及通过环境设计传递企业文化,营造一种积极向上的工作氛围,从而吸引和...
- 工业以太网交换机技术:作为一种常见通信技术,工业以太网交换机集成了光通信、以太网接入和异步数据传输功能,专为恶劣环境设计,能提供高可靠的网络服务,通过存储转发方式增强数据传输速度和网络监控能力。...
船舶吊装作业正面临向三维虚拟设计转变的趋势,虚拟现实技术提供了一个互动的环境,减少了实际操作中的时间和资源消耗,同时增加了设计的逼真度和效率。目前,吊装方案的制定主要依赖人工,这在面对大型设备、复杂...
【标题解析】 标题“浅述温泉与疗养度假区文献综述”表明这是一个关于温泉...整体而言,这份文献综述将为读者提供一个全面了解温泉疗养度假区的窗口,帮助他们深入理解这一领域的理论知识、实践应用以及未来发展方向。
此外,如何选择合适的通信模式也是一个难题。根据不同的应用场景,需要灵活切换D2D与网络中转模式,以确保通信的最优化。 频谱共享是D2D通信的另一大挑战。由于频谱资源是有限的,多个设备在相同或相近的频谱上进行...
《高速公路光通信技术与监理要点浅述》这篇文章,深入浅出地对当前我国高速公路光通信技术的应用现状以及监理的关键点进行了全面分析,为我们展现了高速公路光通信的前沿技术及其在监理过程中的重点关注领域。...
通过使用Proteus,教师能够制作出典型的单片机应用系统,例如流水灯、交通灯、数字钟以及LCD显示等实例,让学生对单片机的应用系统有一个感性认识。学生能够清晰地理解单片机在一个系统中的作用和地位,以及应用情况...
英国在分布并行处理、辅助设备设计和应用研究方面具有优势,而其他国家如法国、德国也在虚拟现实的硬件和软件开发上取得突破,推动了该技术在建筑、医疗、教育等领域的广泛应用。 当前,虚拟现实技术面临的主要挑战...
为了保证仪表数据的实时响应和异常恢复,需要在设计中重点考虑网络的TCP/IP协议栈与微控制器(MCU)结构的设计结合。典型的应用方案是使用CS8900A型网卡芯片与MSP430F147单片机结合,完成LAN转换接口的功能。 MSP...
三维CAD技术是计算机辅助设计(Computer Aided Design)的简称,它利用计算机及其图形设备辅助设计人员进行设计工作,是现代化设计与制造中不可或缺的技术之一。近年来,随着计算机技术的飞速发展,三维CAD技术已...
微功率无线通信网络的建设需要根据具体的应用需求来设计网络结构和功能,以满足多层次的应用要求,如实时数据的采集、控制指令的下发以及电能表的远程抄读等。 2. 运行维护策略 运行维护策略是确保微功率无线通信...
LBP 是一种简单有效的纹理描述子,通过对像素邻域的灰度比较,生成一个位模式,反映纹理的局部变化。Gabor滤波器能同时考虑纹理的频率和方向信息,对纹理进行多尺度、多方向分析。 4. 结构化学习和深度学习随着...
在设计手持设备的LCD背光LED驱动方案时,需要综合考虑能效、体积、成本、亮度一致性、可靠性等因素,选择最适合的驱动方式,以确保设备的性能和用户体验。随着技术的不断发展,未来的LED驱动方案将更加高效、智能,...
【手持设备LCD背光LED驱动方案浅述】 随着科技的发展,手持设备的显示技术日新月异,LCD(Liquid Crystal Display)背光技术是其中的关键一环。在各种媒体设备的照明需求多样化背景下,LED(Light Emitting Diode)...