`
风花雪月饼
  • 浏览: 75976 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

设计模式学习笔记(持续记录中)

    博客分类:
  • Java
阅读更多
其中关于模式的描述来自:《Head First 设计模式》,括号内某些为个人理解,不代表正确

OO设计原则 写道
封装变化
多用组合,少用继承
针对接口编程,不针对实现编程
为交互对象之间松耦合设计而努力
类应该对扩展开放,对修改关闭
依赖抽象,不要依赖具体类
只和“朋友”交谈
别找我,我会找你
类应该只有一个改变的理由


模式 写道
模式是在某情境(context)下,针对某问题的某种解决方案。

情境就是应用某个模式的情况。这应该是会不断出现的情况。
问题就是你想在某情境下达到的目标,但也可以是某情境下的约束。
解决方案就是你所追求的:一个通用的设计,来解决约束,达到目标。


策略模式:
定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
(好像现在常用的DAO,Service就是这个模式)


观察者模式:
在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。
(在Java中已经提供了java.util.Observable和java.util.Observer来实现,也可以通过自己实现。暂时还没碰到类似的应用场景)


装饰模式:
动态的将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。
(可以这样理解:一杯纯的咖啡,现在需要加牛奶,那么牛奶就是装饰了咖啡)


工厂模式(Factory):
定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
所有的工厂都是用来封装对象的创建。
简单工厂:不是真正的设计模式,但不失为一个简单的方法,可以将客户程序从具体类解耦。
工厂方法:使用继承,把对象的创建委托给子类,子类实现工厂方法来创建对象。
抽象工厂:使用对象组合,对象的创建被实现在工厂接口所暴露出来的方法中,也就是抽象工厂的实现类中。
(分为抽象工厂和简单工厂模式,简单工厂模式主要可以对代码进行解耦,抽象工厂就是定义一个工厂接口,然后由不同的工厂去实现,工厂方法就是在某个逻辑类中有类似createObject,但是这个createObject由具体子类去实现)


单例模式(Singleton):
确保一个类只有一个实例,并提供全局访问点。在Java中实现单例模式需要私有的构造器,一个静态方法和一个静态变量。
(主要是要处理好多线程创建实例的问题,可应用于系统配置之类的地方)


命令模式(Command):
将请求封装成对象,这样可以让你使用不同的请求,列队,或者日志请求来参数化其他对象,命令模式也可以支持撤销操作。
(主要是定义一个Command接口,然后有众多的Command实现,而CommandExecuter只负责调用Command实例的execute方法,从而不用管具体实现,达到扩展开放,修改封闭。可用于列队任务等)


适配器模式(Adapter):
将一个类的接口,转换成客户期望的另一个接口。适配器让原本不兼容的类可以合作无间。
(当需要使用一个现有的类而其接口并不符合你的需求时,就使用适配器。适配器改变接口以符合客户的期望)

外观模式(Facade):
提供了一个统一的接口,用来访问子系统的一群接口。外观定义了一个高层接口,让子系统更容易使用。
在方法中只应该调用:该对象本身;被当作方法参数而传递进来的对象;此方法所创建或实例化的任何对象;该对象的任何组件。
(当需要简化并统一一个很大的接口或者一群复杂接口时,使用外观。外观将客户从一个复杂的子系统中解耦)
引用
适配器将一个对象包装起来以改变其接口;
装饰者将一个对象包装起来以增加新的行为和责任;
而外观将一群对象“包装”起来以简化其接口



模板方法模式:
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
模板方法定义了算法的步骤,把这些步骤的实现延迟到子类。
模板方法的抽象类可以定义具体的方法、抽象方法和钩子。


迭代器模式:
提供一种方式顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
把游走的任务放在迭代器上,而不是聚合上,这样简化了聚合的接口和实现,也让责任各得其所。
迭代器允许访问聚合元素,而不需要暴露它的内部结构。
迭代器将便利聚合的工作封装进一个对象中。
当使用迭代器的时候,我们依赖聚合提供遍历。
迭代器提供了一个通用的接口,让我们遍历聚合的项,当我们编码使用聚合的项时,就可以使用多态机制。
(如,有两个类,其中使用了不同的集合类型存储了数据,如果针对具体集合类型编写代码会造成大量冗余代码,提供一个统一的转换为迭代的接口,可使代码依赖性降低)


组合模式:
允许你将对象组成树形结构来表示“整体/部分”的层次结构。组合能让客户以一致的方式处理个别对象和对象组合。
组合模式提供一个结构,可同时包容个别对象和组合对象。
组合模式允许客户对个别对象以及组合对象一视同仁。
组合结构内的任意对象称为组件,组件可以是组合,也可以是叶节点。
(这个模式也就是建立树形的对象组,但总觉得其概念上有点问题。)


状态模式:
允许对象在内部状态改变时改变它的行为,对象看起来好像改变了它的类。
状态模式允许一个对象基于内部状态而拥有不同的行为。


代理模式:
为另一个对象提供一个替身或占位符以控制对这个对象的访问。
使用代理模式创建代表(representative)对象,让代表对象控制某对象的访问,被代理的对象可以是远程的对象、创建开销大的对象或需要安全控制的对象。
代理模式为另一个对象提供代表,以便控制客户对对象的访问,管理访问的方式有许多种。
远程代理:管理客户和远程对象之间的交互。
虚拟代理:控制访问实例开销大的对象。
保护代理:基于调用者控制对对象方法的访问。


复合模式:
符合模式结合两个或两个以上的模式,组成一个解决方案,解决一再发生的一般性问题。
MVC是符合模式,结合了观察者模式、策略模式和组合模式。
模型使用观察者模式,以便观察者更新,同时保持两者之间的解耦。
控制器是视图的策略,视图可以使用不同的控制器实现,得到不同的行为。
视图使用组合模式实现用户界面,用户界面通常组合了嵌套的组件,像面板、框架和按钮。
Model 2是MVC在Web上的应用。
在Model 2中,控制器实现成Servlet,而JSP/HTML实现视图。
分享到:
评论
1 楼 zengguo1988 2008-12-18  
  下次写个实例给大伙学习学习

相关推荐

    设计模式笔记设计模式笔记

    设计模式笔记是对这些模式的深入理解和应用记录,可以帮助开发者在面对复杂系统设计时,快速找到合适的结构和策略。以下是关于设计模式的一些核心知识点: 1. **设计模式的分类**: - 创建型模式:如单例...

    蓝杰学习笔记备份1

    在《蓝杰学习笔记备份1》中,作者不仅记录了对各种开源项目源码的阅读体验,还归纳了在这一过程中掌握的编程语言特性、设计模式、数据结构与算法的应用等内容。对于那些希望从源码层面深入学习的开发者来说,这些...

    教师业务学习笔记范文.doc

    在教育行业中,教师的业务能力是教学质量的关键,而教师的业务学习笔记则是其专业成长的缩影。在本文中,我们将探究教师业务学习笔记范文所蕴含的核心要点,这些要点涵盖了教师在德育、课程开发、职业成长、成功理解...

    软件测试学习笔记

    ### 软件测试学习笔记知识点详解 #### 一、软件测试基础知识 1. **软件测试定义** - **理解**:软件测试是通过执行软件产品来评估其质量的过程。 - **目的**:确保软件产品能够满足用户的需求并达到预定的质量...

    Python 学习笔记 第二版

    最后,笔记中提到的更新记录显示了作者对学习笔记的持续投入和努力,从2012年12月开始,到2013年1月结束初稿编写。而最后完成的校对工作则表明了作者对内容准确性的重视。 通过这份学习笔记,初学者可以更系统地...

    koa2-note, 《Koa2进阶学习笔记》持续更新....zip

    《Koa2进阶学习笔记》是一份详细记录Koa2框架高级特性和实践的资源,旨在帮助开发者深入理解并熟练运用Koa2。作为Node.js领域的轻量级Web框架,Koa2以其简洁的API设计和强大的中间件机制赢得了广大开发者的喜爱。这...

    功能安全学习笔记20230806

    《功能安全学习笔记20230806》是一份关于功能安全的个人学习记录,旨在为读者提供一个补充性的知识框架。虽然它不是全面的培训材料,也没有包含具体的实例,但可以从宏观上帮助理解功能安全的重要概念,特别是在汽车...

    mina2学习笔记

    ### Mina2学习笔记知识点概览 #### 一、Mina入门详解 ##### 第一步:下载使用的Jar包 - **mina-core-2.0.0-M1.jar**:这是Mina核心库,提供了NIO框架的基本功能。 - **slf4j-api-1.5.2.jar**:用于日志记录的高级...

    java后端学习笔记.zip

    本学习笔记主要涵盖了Java后端开发的基础知识、核心技术以及常见框架,旨在帮助初学者和进阶者深入理解Java后端开发。 一、Java基础 Java后端开发首先需要掌握Java语言的基本语法,包括数据类型、控制结构(如if...

    优秀资料(2021-2022年收藏)小学教师业务学习笔记.doc

    教师需要持续记录教学过程中的亮点与不足,进行系统反思和总结。这一过程有助于教师构建个人的教学模式,并将有益的经验推广到更广阔的教育实践中,从而推动自我提升,不断适应教育的发展和变化。 综上所述,一名...

    Java很好的学习笔记部署环境

    以上只是部分内容概览,实际的学习笔记可能还包含了更多关于异常处理、多线程、网络编程、文件操作、设计模式等方面的细节。结合提供的图像资源,可能还涵盖了图形化的环境配置步骤或者示例应用的截图,这些都能帮助...

    马士兵spring学习笔记

    1. **IoC(Inversion of Control)** 指的是控制反转,它是一种设计思想,在Java开发中常用的一种设计模式,用于实现解耦合。在传统的应用程序中,通常由开发者负责对象的创建和管理,而在IoC容器中,这些工作交给了...

    基于ssm云的学习笔记系统.zip

    在学习笔记系统中,MyBatis用于执行CRUD(创建、读取、更新、删除)操作,实现数据库与Java对象之间的映射。 4. **Java**:作为基础编程语言,Java在这套系统中负责编写所有的后端代码。它具有良好的跨平台性,且在...

    『21天精通C++』学习笔记(WORD版)

    9. **高级主题**:包括内存管理、多线程编程、设计模式等,这些都是进阶学习的内容,能够帮助开发者编写更高效、更健壮的程序。 10. **实践项目**:理论学习与实践相结合,通过完成一些小项目,巩固和提升C++编程...

    UNIX学习笔记 包括命令 使用方法 全部都有

    在UNIX学习笔记中,你将了解到以下核心知识点: 1. **文件和目录管理**:包括创建、删除、移动和重命名文件及目录的命令,如`mkdir`、`touch`、`rm`、`mv`和`cp`。另外,还有`cd`用于切换目录,`ls`用于列出目录...

    Struts2_学习笔记.zip

    这个"Struts2_学习笔记"包含了关于Struts2框架的深入学习资料,是理解并掌握Struts2核心概念和技术的关键。 Struts2的核心设计理念是模型-视图-控制器(MVC)架构模式,它简化了Java Web开发,将业务逻辑、数据展示...

    iOS 开发流程个人学习笔记

    这份个人学习笔记将深入探讨iOS开发的核心概念、工具、流程以及最佳实践。 首先,我们要了解iOS开发的基础——Swift编程语言。Swift是Apple在2014年推出的一种现代、安全、强大的编程语言,用于构建iOS、iPadOS、...

    AI大模型学习笔记整理

    本篇学习笔记将对AI大模型的基本概念、发展历程以及广泛的应用场景进行整理和阐述,旨在为深入理解和运用AI大模型提供理论支持和实践指导。 首先,AI大模型是指那些拥有大量参数和复杂结构的人工智能模型。它们的...

    Asp.NETCore WebAPI学习笔记汇总.rar

    ASP.NET Core Web API 学习笔记汇总.pdf 是一个聚焦于使用ASP.NET Core构建Web API的资源集合。ASP.NET Core是一个由微软开发的现代化、高性能、开源的框架,它旨在为开发者提供构建各种类型的应用程序的能力,包括...

    2023年 【8页】20230331腾讯大模型专家学习笔记.pdf

    本文档记录了腾讯在AI大模型方面的学习笔记,为我们揭示了腾讯混元大模型的最新进展以及公司在此领域的整体战略规划。 腾讯混元大模型是该公司AI核心项目之一,其规模和功能受到了公司内部各业务集团的共同关注和...

Global site tag (gtag.js) - Google Analytics