自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

杨充

万事起于忽微,量变引起质变!

  • 博客(240)
  • 收藏
  • 关注

原创 08.面向对象的特性

封装、抽象、继承、多态。实际上,面向对象这个概念包含的内容还不止这些。当谈论面向对象的时候,经常会谈到的一些概念和知识点,为学习后面的几节更加细化的内容做一个铺垫。如果你看了之后,对某个概念和知识点还不是很清楚,那也没有关系。在后面的博客中,会花更多的篇幅,对讲到的每个概念和知识点,结合具体的例子,一一做详细的讲解。来看封装特性。封装也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(或者叫函数)来访问内部信息或者数据。这句话怎么理解呢?

2025-03-24 18:25:29 592

原创 07.迪米特原则介绍

迪米特法则的英文翻译是:Law of Demeter,缩写是 LOD。不过,它还有另外一个更加达意的名字,叫作最小知识原则,英文翻译为:The Least Knowledge Principle。关于这个设计原则,我们先来看一下它最原汁原味的英文定义:把它直译成中文: 每个模块(unit)只应该了解那些与它关系密切的模块(units: only units “closely” related to the current unit)的有限知识(knowledge)。

2025-03-19 19:08:04 718

原创 06.依赖倒置原则介绍

依赖倒置问题思考:“依赖倒置”这个概念指的是“谁跟谁”的“什么依赖”被反转了?“倒置”两个字该如何理解?学习该原则目标:搞懂该原则作用,掌握实现方式,并且应用到实际案例项目中。依赖倒置的定义:高层模块不应该依赖底层模块,应该依赖于抽象。换句话说,设计中应当依赖于接口或抽象类,而不是依赖于具体实现。依赖倒置原则思想:通过依赖抽象层次(如接口、抽象类),可以让高层模块不依赖具体的实现细节,从而使得系统更具扩展性和灵活性。

2025-03-11 18:56:17 911

原创 05.接口隔离原则介绍

问题:接口臃肿在电商系统中,如果我们为用户设计了一个包含所有操作的接口,会导致接口臃肿,增加了实现类的复杂性。客户端在实现时必须实现所有方法,即使它们中的某些方法在当前场景中不需要使用。解决方式:将大接口拆分成多个小接口,每个接口只包含相关的方法。这样可以提高代码的可维护性和灵活性,减少不必要的依赖。如何理解“接口隔离原则”?理解“接口隔离原则”的重点是理解其中的“接口”二字。这里有三种不同的理解。如果把“接口”理解为一组接口集合,可以是某个微服务的接口,也可以是某个类库的接口等。

2025-03-06 19:40:49 961

原创 04.里式替换原则介绍

里氏替换原则与开闭原则的关系里氏替换原则与开闭原则密切相关。开闭原则强调对扩展开放、对修改关闭,而里氏替换原则则确保子类能够正确地替换父类,使得扩展在不修改现有代码的情况下进行。在电商交易系统中,遵循里氏替换原则可以确保我们在扩展支付方式、引入新的支付逻辑时,不会破坏已有系统的稳定性。例如,我们可以添加新的支付方式,而不影响原有的支付逻辑。里式替换原则是用来指导,继承关系中子类该如何设计的一个原则理解里式替换原则,最核心的就是理解“design by contract,按照协议来设计”这几个字。

2025-03-05 12:27:30 794

原创 03.开闭原则详细介绍

如何理解“对扩展开放、对修改关闭”?添加一个新的功能,应该是通过在已有代码基础上扩展代码(新增模块、类、方法、属性等),而非修改已有代码(修改模块、类、方法、属性等)的方式来完成。关于定义,我们有两点要注意。第一点是,开闭原则并不是说完全杜绝修改,而是以最小的修改代码的代价来完成新功能的开发。第二点是,同样的代码改动,在粗代码粒度下,可能被认定为“修改”;在细代码粒度下,可能又被认定为“扩展”。问题思考:开闭原则的主要用途是什么?如何才能做到对外拓展开放,对内修改关闭?

2025-02-13 09:40:15 1027

原创 02.单一职责原则详解

单一责任原则(Single Responsibility Principle,SRP)是面向对象设计中的一条重要原则。这个原则的英文描述是这样的:A class or module should have a single responsibility。一个类或者模块只负责完成一个职责(或者功能)。也就是说,一个模块或类应该只负责一个特定的职责或功能,通过将功能分解到不同的模块或类中,可以使系统更加灵活、可维护和可扩展。从字面上理解,不难。

2024-12-26 09:45:18 1006

原创 16.迭代器模式设计思想

迭代器模式为遍历集合中的元素提供了一种通用接口。其核心思想是,将集合的遍历逻辑与集合对象的实现分离。通过迭代器,客户端代码无需关心集合的底层实现方式(如数组、链表等),就能顺序地访问集合的每一个元素。迭代器模式(Iterator Design Pattern),也叫作游标模式(Cursor Design Pattern)。它用来遍历集合对象。这里说的“集合对象”也可以叫“容器”“聚合对象”,实际上就是包含一组对象的对象,比如数组、链表、树、图、跳表。

2024-11-25 09:32:02 904

原创 15.模版模式设计思想

在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期实现需求?如何保证架构逻辑的正常执行,而不被子类破坏?这个时候可以用模版模式!模板方法模式是类的行为模式。模板模式(Template)将定义的算法抽象成一组步骤,在抽象类种定义算法的骨架,把具体的操作留给子类来实现。

2024-11-20 08:45:04 1047

原创 14.策略者模式设计思想

策略模式是一种行为型设计模式,用于定义一系列可互换的算法,并使它们可以独立于使用它们的客户端而变化。本文档详细介绍了策略模式的基础概念、原理、结构及应用案例,包括折扣计算、文件排序等实际场景,帮助读者深入理解策略模式的实现和优势。此外,并提供了相关代码示例。适合初学者和有一定经验的开发者参考。更多内容定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。策略模式属于对象的行为模式。

2024-11-14 20:22:11 1065

原创 13.观察者模式设计思想

观察者模式(Observer Pattern)的定义:定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。01.观察者模式基础主要解决什么问题呢?一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。模式动机:建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。定义:定义对象间一对多依赖关系,当一个对象状态发生改变,其依赖对象都会收到通知并自动更新。02.观察者模式实现。

2024-11-13 09:42:05 768

原创 11.组合模式设计思想

本文详细介绍了组合模式的设计思想和实现方法,涵盖组合模式的基础概念、实现步骤、实例演示、实现方式、优缺点分析等内容。通过具体的代码案例,展示了如何使用组合模式来处理具有层次结构的对象,如文件系统和购物清单,使客户端可以一致地处理单个对象和组合对象。文章还探讨了透明式和安全式组合模式的区别,并提供了设计建议和适用场景。适合初学者和有一定经验的开发者阅读。定义:将对象以树形结构组织起来,以达成“部分-整体”的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。01.组合模式基础。

2024-11-08 19:16:43 955

原创 10.桥接模式设计思想

本文介绍了桥接模式的设计思想和实现方法。桥接模式通过将抽象部分与实现部分分离,使它们可以独立变化,解决了多层继承带来的复杂性和耦合性问题。文章详细讲解了桥接模式的由来、定义、应用场景和实现步骤,并通过具体实例演示了如何在支付场景中使用桥接模式。此外,还讨论了桥接模式的优缺点及其适用环境,提供了丰富的代码示例和进一步学习的资源链接。桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。

2024-11-06 19:49:08 834

原创 09.外观模式设计思想

外观模式设计思想:为了解决软件系统中的复杂性和耦合性问题,外观模式提供了一组统一的接口,简化客户端与子系统的交互。主要内容包括外观模式的基础、实现、实例演示、应用场景、优缺点及适用环境。通过创建外观类,将复杂系统的内部实现细节隐藏起来,只暴露出简化的接口给客户端,从而降低耦合度,提高系统的可维护性和可扩展性。门面模式,也叫外观模式,英文全称是 Facade Design Pattern。

2024-11-05 17:13:51 617

原创 08.装饰者模式设计思想

装饰者模式是一种设计模式,用于在不修改原始类的情况下动态地给对象添加新功能。本文档详细介绍了装饰者模式的基础概念、实现方法、应用场景及优缺点。通过具体的咖啡示例和Java I/O流中的应用,展示了装饰者模式的灵活性和实用性。此外,还探讨了半透明装饰者模式的概念及其在实际开发中的应用。适合初学者和有一定经验的开发者学习。装饰者模式又名包装(Wrapper)模式。装饰者模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。装饰者模式动态地将责任附加到对象身上。

2024-11-04 08:48:24 838

原创 07.适配器模式设计思想

适配器模式是一种结构型设计模式,用于将不兼容的接口转换为可兼容的接口,使原本不能一起工作的类可以协同工作。本文详细介绍了适配器模式的基础、实现方式(类适配器和对象适配器)、应用场景(如封装有缺陷的接口、统一多个类的接口、替换依赖的外部系统等)以及优缺点。通过具体案例(如读卡器适配、播放器适配)和实际开发中的应用(如数据库适配器、日志框架适配器),帮助读者深入理解和应用适配器模式。将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。

2024-10-31 09:01:00 525

原创 06.动态代理设计模式

本文详细介绍了动态代理设计模式,包括其必要性、概念、实现方式及案例分析。动态代理允许在运行时动态创建代理对象,增强代码复用性和灵活性,减少类膨胀。文章通过对比静态代理,深入解析了动态代理的实现机制,如基于接口和类的动态代理,以及其在Retrofit中的应用。同时,讨论了动态代理的优势和潜在问题,如性能开销和调试难度。最后,提供了丰富的学习资源链接,帮助读者进一步理解和掌握动态代理。动态代理的概括代理类是在运行时生成的。

2024-10-30 12:13:42 1231

原创 05.静态代理设计模式

静态代理定义是什么?代理模式(Proxy Pattern) :为了隐藏与保护目标对象,给某一个对象提供一个代理,并由代理对象控制对原对象的引用。01.静态代理模式基础由来和背景:在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用。比如以下场景就适合用代理模式个人,通过中介来找房东发布的租房。乘客,通过火车站来购买铁路局的车票。客户,通过VPN代理来翻墙查阅国外资料。

2024-10-24 22:53:16 908

原创 04.原型模式设计思想

本文详细介绍了原型模式的设计思想,包括其定义、应用场景、实现原理及优缺点。通过邮件复制的例子,阐述了原型模式如何通过克隆现有对象来创建新对象,从而提高性能和减少代码复杂度。文章还对比了原型模式与工厂模式的区别,并讨论了深克隆和浅克隆的实现方式。最后,总结了原型模式在特定场景下的应用价值和局限性。

2024-10-22 20:17:56 1067

原创 03.建造者模式设计思想

本文详细介绍了建造者模式的设计思想及其应用场景。主要内容包括建造者模式的由来、定义、适用场景及思考,通过实例讲解了如何使用建造者模式解决复杂对象的创建问题。文章还对比了建造者模式与工厂模式的区别,并分析了建造者模式的优缺点。最后,提供了多个相关资源链接,帮助读者深入理解和应用设计模式。建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

2024-10-21 20:16:32 967

原创 02.工厂模式设计思想

考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆形按钮、矩形按钮、菱形按钮等),这些按钮都源自同一个基类,不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观。如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮类的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象,此时,就可以使用简单工厂模式。

2024-10-17 09:39:01 1098

原创 01.单例模式设计思想

对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如何保证一个类只有一个实例并且这个实例易于被访问呢?定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。一个更好的解决办法是让类自身负责保存它的唯一实例。这个类可以保证没有其他实例被创建,并且它可以提供一个访问该实例的方法。这就是单例模式的模式动机。

2024-10-14 20:37:31 1085 1

原创 02.计算器存储器的原理

计算机存储器

2024-08-01 09:34:51 517

原创 01.计算机组成原理和结构

计算机是由 CPU、内存、显示器这些设备组成的硬件

2024-07-24 17:34:20 1026

原创 24.面向对象六大原则

00.面向对象六大原则01.代码单一职责原则02.代码开放封闭原则03.代码里氏替换原则04.代码依赖倒置原则05.代码接口隔离原则06.代码迪米特原则单一职责原则的英文名称是Single Responsibility Principle,简称SRP。它的定义是:就一个类而言,应该仅有一个引起它变化的原因。简单来说,一个类中应该是一组相关性很高的函数、数据的封装。就像《设计模式之禅》中说的:“这是一个备受争议却又及其重要的原则。

2024-06-03 21:02:53 424

原创 1.1String深入理解原理

String设计思想前因后果

2024-04-03 12:54:28 517

原创 TTS通用播放库技术设计

硬件设备需要通过tts语音向用户传递信息使用 TTS 技术为用户提供语音反馈。以便用户可以听到内容或响应!该库地址:https://github.com/yangchong211/YCToolLibTTS现状和发展语音合成又称文语转换(Text to Speech,TTS)技术,是语音处理领域的一个重要的研究方向,旨在让机器生成自然动听的人类语音。系统TTS(Text-to-Speech)介绍TTS 引擎(TTS Engine):TTS 引擎是实际执行文本到语音转换的组件。

2024-03-25 19:22:24 1286

原创 ProtoBuf-gRPC实践

01.gRPC学习背景1.1 为什么要学RPC1.2 RPC是什么1.3 网络库收益分析1.4 学习计划说明1.5 学习问题思考02.ProtoBuf的介绍2.1 ProtoBuf是什么2.2 ProtoBuf和json2.3 ProtoBuf问题思考2.4 ProtoBuf特点2.5 ProtoBuf存储格式2.6 ProtoBuf优缺点2.7 创建proto文件2.8 ProtoBuf核心思想2.9 转化为Json数据。

2024-03-19 20:37:49 1104

原创 M1卡和CPU卡学习

01.整体概述介绍1.1 项目背景说明1.2 IC智能卡说明1.3 基础概念介绍02.CPU卡基础学习2.1 CPU操作流程2.2 读卡器与卡交互指令2.3 APDU指令格式2.4 APDU指令组成2.5 发送指令详细剖析2.6 响应指令详细解析03.M1卡基础学习3.1 什么是M1卡3.2 M1卡数据结构3.3 M1扇区密码结构3.4 M1扇区数据块结构3.5 M1卡片操作步骤3.6 M1卡运作机理3.7 M1卡开发思路。

2024-01-17 11:57:12 3316

原创 FPS监测设计实践

fps监测设计实践

2023-12-08 09:27:29 1052

原创 01.崩溃捕获设计实践

Android的稳定性是Android性能的一个重要指标,它也是App质量构建体系中最基本和最关键的一环。如果应用经常崩溃率,或者关键功能不可用,那显然会对我们的留存产生重大影响。崩溃现场是“第一案发现场”,它保留着很多有价值的线索。接下来具体来看看在崩溃现场,确认重点,内存&线程需特别注意,很多崩溃都是由于它们使用不当造成的。如何去分析日志确认严重程度如果一时半会解决不了,那么能否先止损,采用降级策略。延期修复,如果是非要解决,那么解决完后即通过灰度测试发版,及时跟进问题。

2023-08-29 09:39:13 389

原创 Android JNI 学习实践

01.学习JNI开发流程1.1 JNI开发概念1.2 JNI和NDK的关系1.3 JNI实践步骤1.4 NDK使用场景1.5 学习路线说明02.NDK架构分层2.1 NDK分层构建层2.2 NDK分层Java层2.3 Native层03.JNI基础语法3.1 JNI三种引用3.2 JNI异常处理3.3 C和C++互相调用3.4 JNI核心原理3.5 注册Native函数3.6 JNI签名是什么04.一些必备操作4.1 so库生成打包。

2023-06-28 09:18:15 763

原创 View绘制流程分析

想要弄清楚View是怎么绘制的得先弄明白View是怎么创建出来的。我们先来看下View的创建流程。总结如下所示:Activity执行onResume之后再ActivityThread中执行Activity的makeVisible方法。View的绘制流程包含了测量大小,测量位置,绘制三个流程;Activity的界面绘制是从mDoctor即根View开始的,也就是从mDoctor的测量大小,测量位置,绘制三个流程;

2023-03-23 16:47:41 1122

原创 Binder机制深入理解

每一个应用程序都是由一些Activity和Service组成的,这些Activity和Service有可能运行在同一个进程中,也有可能运行在不同的进程中。作为一名Android开发,我们每天都在和Binder打交道,虽然可能有的时候不会注意到,譬如:startActivity的时候,会获取AMS服务,调用AMS服务的startActivity方法startActivity传递的对象为什么需要序列化bindService为什么回调的是一个IBinder对象多进程应用,各个进程之间如何通信。

2023-03-22 17:54:49 3241

原创 WMS机制学习分析

01.快速了解WMS机制1.1 WMS是什么1.2 应用于那些场景1.3 WMS主要功能1.4 Window是什么1.5 WMS整体框架02.WMS核心流程2.1 WMS启动流程03.WMS流程分析3.1 Window添加View3.2 WMS核心职责3.3 WMS是如何启动3.4 WMS构造方法3.5 WMS窗口管理05.一些源码分析5.1 addView源码分析5.2 remove源码与解析。

2023-03-21 10:59:42 783

原创 通用缓存存储设计实践

01.整体概述说明1.1 项目背景介绍1.2 遇到问题记录1.3 基础概念介绍1.4 设计目标1.5 产生收益分析02.市面存储方案2.1 缓存存储有哪些2.2 缓存策略有哪些2.3 常见存储方案2.4 市面存储方案说明2.5 存储方案的不足03.存储方案原理3.1 Sp存储原理分析3.2 MMKV存储原理分析3.3 LruCache考量分析3.4 DiskLru原理分析3.5 DataStore分析3.6 HashMap存储分析。

2023-03-07 17:11:12 946

原创 数据结构-Hash常见操作实践

数据结构-Hash常见操作实践

2023-02-02 19:26:34 990

原创 感冒咳嗽土法子

01.常见的感冒药02.止咳的土方法03.感冒的土方法。

2022-12-20 19:37:01 1001

原创 移动端防抓包实践

移动端防抓包

2022-12-10 09:31:35 1227

原创 05.观察者设计模式

观察者设计模式

2022-11-23 18:56:32 876

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除