0

0

JAVA之常用设计模式

零到壹度

零到壹度

发布时间:2018-03-31 11:26:18

|

1633人浏览过

|

来源于php中文网

原创

本次的这篇文章主要是和大家分享了关于java之常用设计模式 ,有需要的小伙伴可以看一下。

很早就接触了设计模式,今天在看一些文章的时候发现自己在学习理解设计模式的时候有些偏差。设计模式应该服务于特定的场景,并且是经过前人经验总结而来的代码解决思路,这种解决思路考虑的点在于如何能够让代码之间的耦合度更低并且减少冗余,使得代码耦合度更低的目的是为了程序更好的扩展,所谓的更好的扩展是指在功能的变动或者扩展的情况下尽可能触发较少较少的改动。所以在学习设计模式的时候,一个好的学习方式应该是模拟程序的扩展来比较在使用前人总结的设计模式和现有代码的不同之处,只有真正体会到其优点,才能尽得其精髓。

创建型模式

创建行模式抽象了对象的实例化过程,它帮助一个系统如独立于如何创建、组合和表示那些对象。

抽象工厂模式

360截图20180331112639190.jpg

 
抽象工厂模式用于创建具有不同产品族的工厂,所谓产品族是值得是多个不同对象的组合,不同对象值得是相对于实现同一接口的对象来说,所以同一产品族的对象肯定不是实现同一接口。

抽象工厂模式包括7个主要角色,A类抽象角色和A类具体角色(AbstractProductA,ProductA),B类抽象角色和B类具体角色(AbstractProductB,ProductB),抽象工厂(AbstractFactory)提供A类产品和B类产品的两个方法接口,具体工厂(ConcreteFactory)实现抽象工厂的两个方法接口,两个方法接口的实现依赖于A,B不同的产品(createProductA从A产品的实现类中挑选一个实现类,createProductB从B产品的实现类中挑选一个实现类)。客户短(Client)依赖于抽象工厂的具体实现类,生产一个具体工厂的产品族产品。

立即学习Java免费学习笔记(深入)”;

抽象工厂模式实现了多个产品的产品族工厂的提供,实现了多个产品的多维组合,一个典型的例子的产品族如UnixButton和WindowsButton。适用于不同产品组合的工厂提供。从扩展的角度来看,具体工厂的实现了抽象工厂,如果需要一个新的产品族,只要再实现一个产品族即可,实现了热插拔。对比工厂模式,具体工厂面临的是一个产品,而抽象工厂面临的是一系列产品。

360截图20180331112701105.jpg 

建造者模式

360截图20180331112726612.jpg建造者模式的作用是将一个对象的构建步骤抽象出来,使得易于重写一个对象的构建过程。

建造者模式包括4个主要角色,建造者接口(Builder),具体建造者(ConcreteBuilder),产品对象(Product)和导演类(Director)。导演类的construct方法负责调用抽象建造者的多个buildPart方法进行组装,Builder接口定义多个部分组建过程buildPart()方法和组建结果方法retrieveResult()方法供具体建造者实现,ConcreteBuilder实现部分组建方法和结果返回方法,具体的建造者完成对应的组装任务,并且使用retrieveResult获取对应的组装结果。

从目的上来看,建造者模式实现了对象的不同组装方式的最简实现方式,组建的顺序由导演类控制,而具体的组装任务分布在不同的构建者手里,导演类和抽象建造者的聚合关系使得产品构建的实际操作可以实现热插拔,使得构建的具体实现更容易扩展或替换。反观,如果使用导演类直接操作产品实现产品的组装过程,如果需要更改建造的过程,那么必须要修改导演类,这是我们不想看到的。

结构型模式

结构型模式侧重于解决如何组装现有的类,设计他们之间的交互,以达到一定的目的,比如扩展性,封装性。

适配器模式

360截图20180331112750163.jpg适配器模式的目的是将一个类的方法接口转换成另一个客户端将要使用的另一个方法接口。

适配器模式含有三个主要角色,客户端需要的目标接口(Target)及其方法sampleOperation();被适配的类Adaptee,它是实际的执行者;适配器Adapter,Adapter继承了Target接口,并且继承了Adaptee,Adapter的sampleOperation方法调用Adptee的sampleOperation方法。实际上,对Adaptee类方法的调用可以使用继承的方式,也可以使用直接依赖的方式,前者被称为类适配器,后者被称为对象适配器。

magento(麦进斗)
magento(麦进斗)

Magento是一套专业开源的PHP电子商务系统。Magento设计得非常灵活,具有模块化架构体系和丰富的功能。易于与第三方应用系统无缝集成。Magento开源网店系统的特点主要分以下几大类,网站管理促销和工具国际化支持SEO搜索引擎优化结账方式运输快递支付方式客户服务用户帐户目录管理目录浏览产品展示分析和报表Magento 1.6 主要包含以下新特性:•持久性购物 - 为不同的

下载

适配器模式实现了一个接口到另一个接口之间的兼容性转换。在扩展性方面并无特别的地方。

装饰器模式

360截图20180331112806732.jpg装饰器模式又称为包装模式,其目的是在不改变原有继承关系的情况下,动态的扩展类的功能。这里所说的扩展的类的功能可以是已有方法的改变,也可以是提供更多的方法。

装饰器模式含有4个主要角色,系统已经存在的继承关系,组件接口(Component)和其实现类(ConcreteComponent),装饰者(Decorator)实现了组件接口依赖于被装饰的具体实现类,其sampleOperateration()方法依赖于被装饰的具体组建类的sampleOperation()方法,然后具体的装饰者(ConcreateDecorator)继承自Decorator,可以实现增加其他方法或者修改对应的sampleOperation方法,从而实现了不改变原有类并且实现继承同样的动态方法扩充,并且对于客户端来说这种扩充是透明的。

从扩展的角度来看,Decorator代替的原来ConCreteComponent的位置,并且替代其完成继承的动态扩充,相比直接继承自ConcreteComponent,这种方法的依赖性更小,其装饰的对象也是可以动态插拔的,并且ConcreteComponent并需要知道装饰类的存在,免去复杂类关系的维护。

一个应用的具体例子就是BufferInputStream和FileInputStream之间的关系,InputStream是Component, FileInputStream、ByteArrayInputStream等是具体组件,FilterInputStream是装饰者,BufferInputStream等继承自FilterInputStream,是具体的装饰者。 

360截图20180331112825939.jpg

代理模式

360截图20180331112842012.jpg代理模式的目的是为一个对象提供一个代理,代理对象可以增强,修改甚至删除原有的功能。 
因为代理模式应用十分广泛,所以代理模式已经在另一篇博客中详加叙述了,这里不再累赘。

结构型模式

结构型设计模式专注于类或对象之间的职责分配,研究的是多个类或对象如何高效的合作来完成一个任务。

观察者模式

 360截图20180331112859812.jpg观察者模式的目的是实现一种一对多的依赖关系,使得主题更新的时候能够将这种更新以特定的方式通知与主题绑定的观察者。

观察者模式包含4个参与者,主题接口和具体实现主题(Subject,ConcreteSubject),观察者和具体观察者(Observer,ConcreateObserver)。observer通过聚合方式注册到Subject中,由于依赖关系定义接口中,具体主题可以实现不同的通知策略,并且具体观察者和具体主题之间可以实现低耦合依赖。 
两者之间的依赖关系可以通过attach和detach方法进行建立和解除,subject在状态改变时可以通过notifyObserver通知所有的observers,调用对应observer的update方法。 
从扩展的角度来看,观察者模式的好处在于在新增observer的时候只需要实现observer接口,然后在想要监听的具体subject中attach就实现了添加;同样的,如果想要删除一个subject中的一个observer也仅仅需要调用attach方法,实现了热插拔。如果不采用这种设计方式,任何一方不适用接口都会导致一方的添加困难。

中介者模式

360截图20180331112916324.jpg中介者模式的作用是使用一个中介对象封装一系列对象的交互,使得各个对象的交互不需要显示的相互依赖。简单来讲,就是让不同对象之间的交互由多对多的网状关联转换成一对多的星状关联。

中介者模式由四个主要角色来构建,中介者接口(Mediator)定义公用交互方法changed(); 具体中介者(ConcreteMediator)实现具体的交互方法changed(),并且获取需要持有需要通信的colleague的引用,changed()方法的具体实现依赖于持有的colleague引用; 同事抽象类(Colleague)定义同事接口对中介者接口的关联关系,并且提供获取中介者的接口方法; 具体的同事实现类(ConcreteColleague)可能有多个,主要是实现具体的交互操作,交互操作依赖于其关联的中介者的changed方法。至于为什么说是变成了一对多的关系,从上面四个角色的关系来看,每个colleague都持有一个mediator的引用,而每个mediator持有所有colleage的引用。

中介者模式优点在于解耦复杂系统对象的交互,使得再增加或者删除colleage时仅需要修改中间的中介者。中介者也可以替换成另一个具体中介者,替换相应的交互行为。缺点之处在于随着需要交互同事的不断增加,具体中介者也会不断膨胀。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

2

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

56

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

30

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

59

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

25

2026.03.03

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

79

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

61

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

50

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

47

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.1万人学习

C# 教程
C# 教程

共94课时 | 10.7万人学习

Java 教程
Java 教程

共578课时 | 77.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号