设计模式入门

Python 设计模式入门指南:23 种设计模式轻松学 阅读详情

       在我们工作的初期阶段,我们自己所写出来的代码往往特别混乱,一个类的代码过多,代码的耦合度特别高,不具有复用性,当过一段时间我们在回来修改自己的代码时发现我们自己都很难看懂了,还需要花很长的时间去理,这时候就会觉得特别的痛苦,感慨自己怎么能写成这样,在做开发的过程中,自己慢慢的感觉到,自己实现的代码其实都是面向过程的,但确打着 Java 面向对象的幌子,写出来的东西充满了面向过程的味道,总觉得缺少点指导思想的东西


       这段时间在看 <<Head First>> 设计模式一书,觉得非常不错,有必要总结一下,于是就想借鉴参考 <<Head First>> 把设计模式总结成一个系列的博客,方便自己日后来复习,今天我们就简单的来先一起入门一下,简单的探讨一下设计模式,设计模式是人们在面对同类型软件工程设计问题所总结的一些有用的经验,模式不是代码,而是某类问题的通用设计解决方案,设计模式的本质是使软件工程在维护性、扩展性、变化性、复杂度方面变成 O(N),提到设计模式我们就不得不提面向对象的六大设计原则,这里我们不做详细的讲解,只是简单的概括了解一如下


一、面向对象六大设计原则


1. 单一职责原则


       简单说,就是一个类只做一件事情,主要是对于类职责的定义,什么类负责什么职责,以及怎么划分职责,当然有时候并不是那么的清晰,可能很多时候职责的划分要靠对于业务的理解,以及个人的经验来界定,如果我们遵守这个职责,那么我们类的划分就具有了单一的职责,也就达到了高内聚,低耦合,还需要我们慢慢从经验中来总结,并不能一下就水到渠成

单一职责优点:

  • 类的复杂性降低,现实什么都有比较明确清晰地定义
  • 代码的可读性提高,复杂度降低
  • 可维护性提高,具有更好的扩展性
  • 业务变更引起的不断修改降低


2. 里氏替换原则


       面向对象语言的 3 大特点是继承、封装、多态,里氏替换原则是依赖于继承、多态这两大特性,里氏替换原则简单来说就是所有引用基类,接口的地方必须能透明的使用其子类的对象,也就是说,只要父类能出现的地方,子类就可以出现,而且替换为子类也不会出现错误和异常,但是反过来就不行,有子类出现的地方,父类未必就能适应

里氏替换优点:

  • 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性
  • 提高代码的重用性
  • 提高代码的可扩展性
  • 提高产品或代码的开放性

里氏替换缺点:

  • 继承是侵入性的,只要继承,就必须拥有父类的所有属性和方法
  • 降低了代码的灵活性,子类必须拥有父类的属性和方法,让子类有了一定的约束性
  • 增强了耦合性


3. 依赖倒置原则


在 Java 中,抽象就是指接口或者抽象类,两者都是不能被直接实例化的,细节就是实现类、实现接口或继承抽象类而产生的类就是细节,其特点就是可以被直接实例化,依赖倒置原则在 Java 语言中的表现就是,模块间的依赖通过通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的,也就是面向接口编程,采用依赖倒置的原则可以减少类间的耦合,提高系统的稳定性,提高代码的可读性和可维护性

依赖倒置优点:

  • 可扩展性好
  • 耦合度低


4. 开闭原则


开闭原则是Java里设计最基本的设计原则,开闭原则的定义是:

       一个软件实体如类、模块和函数应该对扩展开放,对修改关闭,在软件的生命周期内,因为变化,升级和维护等多种原因需要对代码进行不断的修改,可能会给旧代码引入错误,因此当软件需要变化时,我们应该尽量通过扩展的方式来实现,而不是通过已有的代码

开闭原则优点:

  • 增加稳定性
  • 可扩展性高


5. 接口隔离原则


       客户端不应该依赖它不需要的接口:一个类对另一个类的依赖应该建立在最小的接口上,根据接口隔离原则,当一个接口太大时,我们需要把它分成更细小的接口,使用改接口的客户端只需要知道与之相关的的方法即可

接口隔离原则有点:

  • 隐藏实现的细节
  • 降低耦合性
  • 提升代码的可读性


6. 迪米特原则


       迪米特原则也称为最少知识原则,一个对象应该对其他的对象有最少的了解,也就是说一个类应该对自己需要耦合或调用的类知道得最少,这有点类似于接口隔离原则中最小接口的概念,类的内部如何实现、如何复杂都与调用者或者依赖着没有关系,调用者或者依赖者只需要知道它需要的方法即可,其它的一概不关心,类与类之间的关系越密切,耦合度就越高,当一个类发生改变时,对另一个类的影响也越大

迪米特原则优点:

  • 降低复杂度
  • 降低耦合度
  • 增加稳定性


       面向对象的六大原则在我们的开发中非常的重要,希望引起大家的注意,我们在经验慢慢的提升过生中多去使用,因为它给应用程序带来了灵活性、可扩展性,高度解耦,如果在开发中使用好这些原则,在一些适合的场景中去运用,不且不断地去思考,改进



二、设计模式


       设计模式并不能用来直接完成代码的编写,只是描述在不同情况下解决问题得方案,面向对象设计模式通常以类或对象来描述其中的关系和相互作用,他们的相互作用能够使软件系统具有高内聚、低耦合,可扩展的特性,并且使软件具有很高的灵活性,对应变化


Java 中的 23 种设计模式,我们来简单的罗列一下,以后会对我们经常在项目中用到的进行详细的解释:


1. 策略模式

设计模式之策略模式

2. 观察者模式

设计模式之观察者模式

3. 装饰者模式

设计模式之装饰者模式

4. 单例模式

设计模式之单例模式

5. 工厂模式


6. 命令模式


7. 适配器模式


8.外观模式


9. 模板模式

模板方法模式

10. 迭代器模式


11. 组合模式


12. 状态模式


13. 代理模式


14. 复合模式


15. 桥接模式


16. 生成器模式

设计模式之生成器模式

17. 责任链模式


18. 蝇量模式


19. 解析器模式


20. 中介者模式


21. 备忘录模式


22. 原型模式


23. 访问模式


声明:文章参考《Head First》以及 Android 开发进阶

今天的额博客就写到这里,以后会把经常用到的慢慢补全,方便查阅




设计模式入门(王者荣耀之设计英雄篇) 大部分学习是一件充满乏味和反人性(克服懒惰)的事(i薙鱼导师:琦大大),假如野人我们的祖先不学会使用火和工具,那么可能就没有现在的我们了,一切都是为了部落,为了生存。[FollowMe]我会尽力使学习过程变得比较轻松愉悦。设计模式是前辈们总结的经验和智慧,就好比武林绝学葵花宝典(还不需要你自宫,简直不要太棒!) 阅读详情

相关推荐

Redis中什么是Big Key(大key)问题?如何解决Big Key问题?

通俗易懂的讲,Big Key就是某个key对应的value很大,占用的redis空间很大,本质上是大value问题。key往往是程序可以自行设置的,value往往不受程序控制,因此可能导致value很大。redis中这些Big Key对应的value值很大,在序列化/反序列化过程中花费的时间很大,因此当我们操作Big Key时,通常比较耗时,这就可能导致redis发生阻塞,从而降低redis性能。用几个实际的例子对大Key的特征进行描述:● 一个String类型的Key,它的值为5MB(数据过大); ● 一

weixiaohuai的博客 3万+

书评--设计模式入门

个别问题的最佳解答成熟的产业,应该有很多经典的设计,广为流传的想法,共通的价值。由于信息硬件突飞猛进,信息应用面快速深入所有环节,导致需求多样与设计复杂。在开发与使用软件时,我们期待各种问题的最佳解答。十多年前,Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides (由于太有名了,一般称之为四人帮 Gang of Four GoF)仿效

胡百敬(Byron_Hu) 4711

机房电脑的“还原”秘密:如何应对重启即清零的困境

机房电脑重启后自动还原是常见的现象,这主要依靠硬件还原卡或软件还原系统(如冰点还原)实现。这类技术会定期将系统盘恢复初始状态,但通常不保护非系统盘。要高效使用公共电脑,建议:1)将个人文件存储在D/E盘;2)使用绿色便携软件;3)必要时可尝试通过热键临时关闭还原功能;4)养成云端备份习惯。掌握这些技巧既能遵守机房规定,又能保证学习资料安全,培养良好的数字资产管理能力。

一位主要以学校学生信息技术,社会工作生活讲解科普拓展的博主 1456

设计模式基础入门

创建型模式→ 解决对象创建问题,简化实例化过程。结构型模式→ 解决类和对象之间的组合,增强灵活性。行为型模式→ 解决对象间的通信与职责分配,提升扩展性。类别模式名称核心目的主要应用场景创建型模式单例模式 (Singleton)保证唯一实例,节省资源Spring Bean、数据库连接池、缓存客户端创建型模式工厂方法/抽象工厂解耦复杂对象的创建数据库操作、支付系统、多消息队列适配结构型模式代理模式 (Proxy)扩展增强、不改变原有代码Spring AOP、RPC 调用、权限控制。

沉梦听雨的博客 935

基于STM32F103与AD8232的便携式心电监测系统设计与实现

本文详细介绍基于STM32F103微控制器与AD8232心电传感器模块的便携式心电监测系统设计与实现。系统通过ADC采集心电信号,结合软件滤波算法处理基线漂移和工频干扰,并利用OLED屏幕实时显示波形,具有低成本、高实用性的特点,适用于健康监测与嵌入式学习。

m5n6o7的博客 737

Oracle11g安装教程、配置实例、监听、客户端程序详解_Windows篇

Oracle11g安装教程、配置实例、监听、客户端程序详解_Windows篇 文章目录Oracle11g安装教程、配置实例、监听、客户端程序详解_Windows篇前言一、数据库的安装前准备,前提是没有安装过!!!二、仅安装数据库软件(数据库运行环境)三、添加数据库实例四、设置监听程序,让数据库可以通过网络访问五、为目标数据库设置网名总结 前言 如果需要安装包:联系我看到会给你链接,因为现在官网已经不提供10g,11g的安装包了,在网盘保存望悉知(回复不会很及时,下班看到会回复敬请谅解)。 提示:以下

zhx__的博客 5630

Java设计模式 之 入门设计模式、总结

入门设计模式

Xiao_Wanzi94的博客 498

手把手教你用Nangate 45nm开源工艺库搞定数字电路仿真(附FreePDK资源)

本文详细介绍了如何使用Nangate 45nm开源工艺库进行数字电路仿真,包括环境搭建、关键文件解析、仿真环境配置及低功耗设计等实战内容。特别推荐FreePDK资源,帮助读者快速掌握从理论到实践的全流程操作,适用于学术研究和小规模数字电路设计。

weixin_30352645的博客 488

高级前端工程师必备的 JS 设计模式入门教程,常用设计模式案例分享

        什么是设计模式?为什么要有设计模式?单例模式、工厂模式、建造者模式、适配器模式、代理模式、装饰器模式、观察者模式、策略模式、状态模式分别是什么?他们解决了什么样的问题?本文将给您答案。

RenGJ010617的博客 6966

半导体AMHS系统振动控制技术演进:从0.5G到超低振动的工艺革命

在半导体制造进入埃米级时代后,AMHS的振动控制能力将成为区分厂商技术等级的标尺。国内企业通过“弹性机械设计-混合主动控制-智能调度”的三重创新,正逐步突破0.2G阈值,支撑12英寸晶圆厂向3nm/2nm制程升级。未来,振动抑制不再仅是物流系统的性能参数,而是与光刻、刻蚀等核心工艺深度耦合的基础能力,这将重塑半导体设备产业的竞争格局。

m0_60674045的博客 1584

云端全自动AI漫剧生成工作流:从模型选型到完整实现

本文提出了一套云端全自动AI漫剧生成工作流解决方案,旨在解决传统漫剧制作效率低下的问题。该系统采用"编排引擎+模型矩阵"架构,通过集成大语言模型、图像生成、视频合成等技术,实现从剧本输入到成片输出的全流程自动化。 核心内容包括: 模型选型方案:剧本解析采用DeepSeek-V3/GPT-4o,图像生成使用DALL-E 3,视频合成选用Stable Video Diffusion,语音合成采用MiniMax TTS 系统架构设计:基于Celery分布式任务队列的编排层,分解任务至各功能模块

huanghm88的专栏 643

Mybatis入门案例设计模式分析

Mybatis入门案例设计模式分析 package com.itheima.test; import com.itheima.dao.IUserDao; import com.itheima.domain.User; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org

weixin_45863242的博客 196

Android实现自动输入文本效果 (附完整源码)

Android实现自动输入文本效果 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 416

基础入门——设计模式概述

基础入门——设计模式概述http://dotnet.chinaitlab.com/CSharp/376373.html  

myyihua的专栏 404

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

零基础设计模式——设计模式入门

想象一下,你是个大厨,每天都要做很多菜。有些菜的制作流程是固定的,比如“炒”这个动作:热锅、倒油、放葱姜蒜爆香、放主料、翻炒、加调料、出锅。这个“炒”的流程,就是一种“模式”。设计模式 (Design Pattern)在软件开发中,就像是大厨做菜的“秘方”或“固定流程”。它是前辈们在解决各种软件设计问题时,总结出来的、可重复使用的、高效的解决方案。设计模式的定义与重要性定义:在特定情境下,针对特定问题的、经过验证的、优雅的解决方案。重要性经验的沉淀。

qqxhb 资源共享 1269

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

设计模式学习(一)入门篇

 设计模式入门篇,UML的基本语法

浮云一直在等待。。。。。。 708

设计模式设计模式(Design Pattern,DP)入门,开闭原则和单一职责理解

设计模式(Design Pattern,DP)入门以及六大原则(part 1) 面向对象编程 面向对象(Object Oriented)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。 面向对象是相对于面向过程来讲的,指的是把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系 统建模,更贴近事物的自然运行模式。 啥是面向过程,啥是面向对象,可能举个例子会比较清晰: 做一道西红柿炒蛋: 面向过程做法:

afiguresomething的博客 373

什么是设计模式和入门书籍

110529 一、什么是设计模式 英文:Design Pattern 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。 二、入门书籍 1、《大话设计模式》 2、

Road to the Heart 456

Java设计模式-快速入门(重制版)

本文介绍了Java设计模式的基础知识,包括其定义、价值与分类体系。设计模式是解决特定问题的通用解决方案框架,可提升代码可维护性、扩展性和复用性。文章详细解析了SOLID五大核心原则及其他重要原则,并按创建型(如单例、工厂)、结构型(如适配器、装饰器)和行为型(如观察者、策略)三大类对23种设计模式进行了概括,用生活化比喻说明每种模式解决的问题。通过学习可掌握优化代码结构、提升系统灵活性的方法。

weixin_66095070的博客 778

设计模式入门进阶深入书籍汇总

作者:知乎用户 链接:https://www.zhihu.com/question/19679933/answer/15827131 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 我因为上《软件架构与设计模式》这门课,所以基本目前市面上比较主流的关于设计模式的书我都或多或少看过。我不知道你的水平如何,以及学习设计模式的目的(是仅仅是想做个入门先还是想直接在现有的...

weixin_43277501的博客 1535

Java设计模式精讲之UML急速入门

简单记录 - 慕课网 - Java设计模式精讲 Debug方式+内存分析 文章目录第2章 UML急速入门2-1、UML简单入门UML定义UML特点UML 2.2分类UML类图理解泛化、实现理解依赖、关联理解聚合、组合UML时序图2-2、UML类 图讲解2-3、UML类图讲解 自上而下2-4、UML类图讲解 - 对比讲解联想记忆 第2章 UML急速入门 主要讲解UML基础、UML类图、UM...

渐若窥宏大的博客 604

Mybatis入门案例的设计模式分析

@[TOC]自定义mabatis框架(为了了解mybatis的执行细节)(这里写目录标题) 一级目录 二级目录 三级目录

weixin_43347737的博客 158
上一篇: 设计模式之观察者模式
下一篇: 设计模式之策略模式
QDJdeveloper
博客等级 码龄11年 108粉丝 49原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值