设计模式在系统分析和设计的阶段非常的重要,学习设计模式的目的是为了能够结合具体的需求写出复用可扩展的代码.个人觉得在学习设计模式的过程中,不必拘泥于记忆特定的UML结构,主要在于理解各个角色直接的联系,及其解决的应用场景.同样设计模式也不可生搬硬套,结合具体的需求场景可以做些相应的修改. 介绍以下几种设计模式之前,先来了解一下面相对象的几个设计原则:
依赖倒转原则: 以前的面相过程的开发模式,都是上层api依赖于底层的api,上层接口通常表达的业务及模型,底层的接口则更多的侧重于与计算机底层的交互,这样的缺点是依赖于具体,程序不稳定. 而依赖倒转的原则说的就是将上述这种依赖反过来, 让具体的实现依赖于上层的抽象,上层的抽象再依赖于更高层的抽象,这样的关系更为稳定,因为在一个领域内概念是稳定的,即抽象也是稳定的.
开闭原则: 好的面相对象的软件应该是 对修改是关闭的,对扩展是开放的
接口隔离原则: 也叫接口最小化原则. 接口即规范,是对客户端的承诺. 如果所包含的承诺越多,所要履行的职责也就越多. 定义接口时,应根据客户端的接口需求,反复斟酌提炼接口定义,而不是想到什么就添加什么,接口定义是需要反复思考的.
以下分别介绍一些常见的设计模式,这也是我在阅读<<java与模式>>一书中的读书笔记. 书还未读完,后续会加以补充..
适配器模式
1.分为类适配器模式和对象适配器模式,前者利用继承实现,后者利用组合实现。
2. 实现原理都是 通过定义好通用的接口规范,委托已有实现,实现客户端要的接口形式,因组合优于继承,推荐使用对象适配模式
合成模式
1. 是结构类的一种设计模式,通过统一接口的方式来使得客户端平等对待对象的组成部分
2. 主要有三个角色: component(对组成部分的高度抽象,是一个中间层的角色,提供客户端所需方法); composit(“树枝”节点组合“组件”);leaf(最小的组成单元,由于平等对待,也实现component接口)
2.根据实现的不同分为安全类型的合成模式和透明类型的合成模式,前者将“树枝”和“树叶”区分对待, 将访问集合的一些方法(addChild()等)放在composit(树枝节点中), 而不放在“树叶”节点中,component接口中只定义一些客户端期望的方法即可; 而后者对“树枝”和“树叶”角色平等对待,都继承至统一的抽象类,访问集合一些方法都规定在component 抽象类中。
3. 适用于一些递归的场景中。整体和部分从抽象的角度上来说是一致的,可以想到的一个例子是:假设有一个大盒子,由很多的小盒子组成,如果想要将这个大盒子装满的话,其实就是将每一个小盒子装满,如果对大盒子和小盒子适当的抽象下的话,其实它们都是可装东西的构件(component),所以说实现的时候可以定义一个包含客户端所需的方法的抽象类(component),里面包含一个“装东西”的方法,那么如果调用composit 的“装东西”的方法时,迭代调用composit中包含组件的” 装东西方法“即可。--例子也是临时想的,可能不太到位。。
工厂模式
工厂其实是把客户端代码中依赖于具体实现的代码隔离到具体的工厂中, 避免了客户端代码中违反依赖倒转的行为,即new 后跟具体实现类的代码. .工厂模式分为以下三中:
简单工厂(静态工厂): 根据客户端情况,生产具体的产品类,需要一个抽象产品作为返回值, 优点是结构简单,无论产品的结构怎么变,只需要根据约定修改工厂类即可.
工厂方法: 其实就是在简单工厂的基础上,将工厂具体类抽象了一下,每个具体的工厂类生产特定的具体产品.
抽象工厂: 适用于生产一套产品,而这一套产品中的产品之间存在某种约束规则,规定抽象工厂类,在抽象工厂中定义要生产的所有产品,再定义组装者,在组装者中聚合抽象的工厂类,组装者委托抽象的工厂类提取这一套产品中的各个产品进行组装,这样的好处是保证了这一套产品中各个产品之间的约束关系.举个例子.假设要生产一台电脑,并且这台电脑A规格的cpu就不能配B规格的主板只能配相同规格的主板,那在这种情况下,如果使用简单的工厂模式为每一个组件分别定义一个工厂类的话,那么就有可能出现 A规格cpu配B规格的主板的情况. 转变思路,为一个组成相对稳定的产品规定一个抽象的工厂类就保证了生产出来的各个组件的规格都是相同的. 因为在实例化抽象类的时候,已经统一指定了每个构件的规格,保证了每个组件的规格一致. 以上的这一点我觉得应该是抽象工厂设计的初衷.
单例模式: 分为懒汉和饿汉模式,区别就在于懒汉请求时才实例化,而饿汉则是初始化时就已经实例化(final static ClassName a= xxx),为了适应多线程环境下的情况,可以使用同步关键字实现同步
构建者模式
要实现构建的过程统一,当构建的内容不一致. 主要的角色有导演类, 构造者,和具体的产品类.产品类一般会实现一个统一的标示接口,便于产品的链式构造. 但在实际的应用中如果对系统的把握比较大,比如明确知道产品的构成成分是稳定的,这时就可以将产品与构造者的角色统一合并至产品角色中. 总的来说,构建者的主要思想就是将构建的指导过程由导演者角色担当, 构建过程由构建者担当, 让客户端感觉不到产品族的构造过程. 具体的类结构可以看情况有所不同.它与抽象工厂的区别在于,抽象工厂要生产就生产一整套, 而构建者模式这是产品成分的动态组合,具体要组合哪些个产品成分可以有客户端控制
不变模式:
这里主要讲的是强不变模式: 即final 关键字修饰的不变类.好处是不需要额外的同步,多线程下安全. 缺点是如果需要中间结果时,只能创建不变对象的副本. 像那些从创建后,状态就不会改变的类就应该设计为不变类.不变类的内部不应该提供可以改变自身状态的方法.
缺省模式:
这个很好理解,就是为接口的实现类提供一个默认的抽象实现,具体的实现类继承至该'适配类‘,只需要关注自己的方法即可。
代理模式:
代理类和代理类都继承于同一个接口,代理类内部聚合一个被代理对象。客户端请求代理对象的方法,从而使得方法得以加强。这个是静态代理的主要机制。有的书上又将代理模式分为多种类型: 如智能应用类型就是最常见的一种类型,其代码结构如上所述。
相关推荐
Java数据对象(JDO)<br>概述<br>JDO对象模型<br>JDO API<br>JDO实例的生命周期<br>JDO和EJB<br>开发可持久类<br>范例应用程序<br>配置FFJ<br>配置数据源<br>捕获数据库模式<br>把类映射到数据库对象<br>编译类<br>...
《Java设计模式》是刘伟老师的一本经典教材,它深入浅出地讲解了软件设计中的重要概念——设计模式。设计模式是经验丰富的开发者在解决常见问题时总结出的通用解决方案,是软件开发中的智慧结晶。这本书的课后习题和...
### Struts Web设计与开发大全知识点总结 #### 一、Struts及Java Web基础知识 **1.1 Java Web基础** - **1.1.1 起点:Servlet/JSP** - Servlet(服务器端应用程序接口):Servlet 是一种运行在服务器端的小程序...
它遵循Model-View-Controller设计模式,提供了一个清晰的分层结构来组织Web应用程序。 ### 三、SSM框架集成与实践 #### 1. 需求分析 本次作业的主要任务是基于注解的方式整合SSM框架,实现一个简单的查询数据库并...
#### Java设计模式概述 Java作为一种优秀的面向对象编程语言,其简单性和强大的功能非常适合设计模式的应用。Java平台根据应用场景大致可分为J2SE(标准版)、J2ME(移动版)和J2EE(企业版)。这些版本分别适用于...
预备知识 <br>2.1 Java程序设计基础 <br>2.1.1 Java语言规则 <br>2.1.2 Java变量和函数 <br>2.1.3 子类 <br>2.1.4 this和super <br>2.1.5 类的类型 <br>2.1.6 抽象类 <br>2.1.7 接口 <br>2.1.8 包 <br>2.2 JavaBeans...
设计模式概述 - **从招式与内功谈起**:这部分内容将帮助读者理解设计模式的本质,即它们不仅仅是编程技巧的集合,更是解决问题的思维模式。 - **招式**:指的是具体的编程实践,如类的设计、方法的实现等。 - *...
" JAVA 设计模式概述" JAVA 设计模式是指在软件设计过程中,为了提高代码的可维护性、灵活性和可扩展性所使用的一些惯用解决方案。JAVA 设计模式可以分为三种:创建模式、结构模式和行为模式。 1. 创建模式 创建...
Web MVC是一种流行的软件设计模式,它将应用程序逻辑分为模型、视图和控制器三个部分,这种分离有助于提高代码的可维护性和可扩展性。 #### 二、MVC架构原理概述 1. **模型(Model)**:代表数据层和业务逻辑层,...
软件设计模式概述 软件设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 面向对象的设计原则 1. 一个...
它遵循了MVC(Model-View-Controller)设计模式,提供了一种清晰的方式组织代码,使得业务逻辑与表现层分离。SpringMVC的核心组件是DispatcherServlet,作为中央前端控制器,它负责接收所有的HTTP请求,并决定哪些...
以上就是23种设计模式的概述,这些模式在实际项目中有着广泛的应用,能帮助开发者更好地理解和设计复杂的软件系统。"疯狂Java"的总结文档将深入讲解每种模式的原理、实现方式以及在实际场景中的应用,是学习和掌握...
### 23种JAVA设计模式和15种J2EE设计模式...以上是部分JAVA设计模式和J2EE设计模式的概述。通过合理运用这些模式,开发者可以编写出更高质量、易于扩展和维护的代码。希望本文能够帮助大家更好地理解并应用这些模式。
通过前后端分离的设计模式,使得前端界面更加美观、友好,提升了用户体验。此外,项目还引入了单元测试和集成测试,确保了系统的稳定性和可靠性。 通过本项目的实践,不仅加深了对SSM框架的理解,还提高了实际项目...
#### 一、设计模式概述 设计模式是一种软件设计方法,它为软件开发者提供了一种标准化的方式去解决常见的软件设计问题。设计模式的使用可以提高代码的可读性和可维护性,同时也能增强系统的灵活性。 #### 二、设计...
以上仅是部分设计模式的概述,实际的“JAVA设计模式”帮助文档会提供更详尽的解释、示例代码以及如何在Java项目中应用这些模式的指导。理解并熟练运用这些设计模式,可以帮助开发者写出更加灵活、可维护和高效的应用...
#### 一、设计模式概述 设计模式是软件工程领域中一种通用的解决方案,它描述了在特定情况下解决常见问题的方法。《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented...
#### 一、设计模式概述 设计模式是一种软件设计领域中的最佳实践,它能够帮助开发者解决常见的编程问题。设计模式通常被分为三大类:创建型模式、结构型模式和行为型模式。 ##### 创建型模式 创建型模式主要关注的...
内容包括统一建模语言基础知识、面向对象设计原则、设计模式概述、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式、适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、...