自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(214)
  • 收藏
  • 关注

原创 23种设计模式-迭代器(Iterator)模式

迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器接口Iterator:该接口必须定义实现迭代功能的最小定义方法集比如提供hasNext()和next()方法。迭代器实现类ConcreteIterator:迭代器接口Iterator的实现类。可以根据具体情况加以实现。容器接口Aggregate:定义基本功能以及提供类似Iterator iterator()的方法。

2025-09-05 16:51:13 980

原创 23种设计模式-责任链模式

一个请求沿着一条“链”传递,直到该“链”上的某个处理者处理它为止。Client:客户端Handler:抽象处理者ConcreteHandler:具体处理者责任链模式非常简单异常好理解,相信我它比单例模式还简单易懂,其应用也几乎无所不在,甚至可以这么说……case 0:break;

2025-09-05 16:04:26 631

原创 23种设计模式-策略模式

定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。类型:行为类模式类图:策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换。

2025-09-05 13:39:16 465

原创 23种设计模式-模板方法模式

定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。流程封装AbstractClass : 抽象类,定义了一套算法框架ConcreteClass1 : 具体实现类1ConcreteClass2: 具体实现类2模板方法实际上是封装一个算法框架,就像是一套模板一样。而子类可以有不同的算法实现,在框架不被修改的情况下实现算法的替换。下面我们以开电脑这个动作来简单演示一下模板方法。

2025-09-05 11:46:19 759

原创 设计模式六大原则6-开闭原则

也就是说,只要我们对前面5项原则遵守的好了,设计出的软件自然是符合开闭原则的,这个开闭原则更像是前面五项原则遵守程度的“平均得分”,前面5项原则遵守的好,平均分自然就高,说明软件设计开闭原则遵守的好;到这里,设计模式的六大原则就写完了。对这六个原则的遵守并不是是和否的问题,而是多和少的问题,也就是说,我们一般不会说有没有遵守,而是说遵守程度的多少。开闭原则可能是设计模式六项原则中定义最模糊的一个了,它只告诉我们对扩展开放,对修改关闭,可是到底如何才能做到对扩展开放,对修改关闭,并没有明确的告诉我们。

2025-09-04 17:33:18 743

原创 设计模式六大原则5-迪米特法则

但是凡事都有度,虽然可以避免与非直接的类通信,但是要通信,必然会通过一个“中介”来发生联系,例如本例中,总公司就是通过分公司这个“中介”来与分公司的员工发生联系的。现在这个设计的主要问题出在CompanyManager中,根据迪米特法则,只与直接的朋友发生通信,而SubEmployee类并不是CompanyManager类的直接朋友(以局部变量出现的耦合不属于直接朋友),从逻辑上讲总公司只与他的分公司耦合就行了,与分公司的员工并没有任何联系,这样设计显然是增加了不必要的耦合。那正是迪米特法则要去完成的。

2025-09-04 16:20:29 421

原创 设计模式六大原则4-接口隔离原则

接口隔离原则的含义是:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。对于类B和类D来说,虽然他们都存在着用不到的方法(也就是图中红色字体标记的方法),但由于实现了接口I,所以也必须要实现这些用不到的方法。可以看到,如果接口过于臃肿,只要接口中出现的方法,不管对依赖于它的类有没有用处,实现类中都必须去实现这些方法,这显然不是好的设计。问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。

2025-09-04 16:06:12 622

原创 设计模式六大原则3-依赖倒置原则

采用依赖倒置原则给多人并行开发带来了极大的便利,比如上例中,原本Mother类与Book类直接耦合时,Mother类必须等Book类编码完成后才可以进行编码,因为Mother类依赖于Book类。在Java中,抽象指的是接口或者抽象类,细节就是具体的实现类,使用接口或者抽象类的目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率。

2025-09-04 14:50:54 316

原创 设计模式六大原则2-里氏替换原则

比如使用继承会给程序带来侵入性,程序的可移植性降低,增加了对象间的耦合性,如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能会产生故障。定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。

2025-09-04 14:01:23 504

原创 设计模式六大原则1-单一职责原则

后来由于某种原因,也许是需求变更了,也许是程序的设计者境界提高了,需要将职责P细分为粒度更细的职责P1,P2,这时如果要使程序遵循单一职责原则,需要将类T也分解为两个类T1和T2,分别负责P1、P2两个职责。(这样做的风险在于职责扩散的不确定性,因为我们不会想到这个职责P,在未来可能会扩散为P1,P2,P3,P4……可以看到,这种修改方式没有改动原来的方法,而是在类中新加了一个方法,这样虽然也违背了单一职责原则,但在方法级别上却是符合单一职责原则的,因为它并没有动原来方法的代码?还有一种修改方式:。

2025-09-04 13:50:01 867

原创 23种设计模式-命令模式

将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。命令角色(Command):定义命令的接口,声明具体命令类需要执行的方法。这是一个抽象角色。具体命令角色(ConcreteCommand):命令接口的具体实现对象,通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。调用者角色(Invoker):负责调用命令对象执行请求,通常会持有命令对象(可以持有多个命令对象)。

2025-09-04 10:33:08 841

原创 23种设计模式-外观模式

外观模式(也成为门面模式)要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。它提供一个高层次的接口,使得子系统更易于使用。外观模式就是统一接口封装。将子系统的逻辑、交互隐藏起来,为用户提供一个高层次的接口,使得系统更加易用,同时也对外隐藏了具体的实现,这样即使具体的子系统发生了变化,用户也不会感知到,因为用户使用的是Facade高层接口,内部变化对于用户来说并不可见。这样一来就将变化隔离开来,使得系统也更为灵活。Client : 客户端程序。Facade : 对外的统一入口,即外观对象。

2025-09-04 10:19:04 912

原创 23种设计模式-组合模式

1、创建 Employee 类,该类带有 Employee 对象的列表。2.使用 Employee 类来创建和打印员工的层次结构。

2025-09-04 10:01:23 231

原创 23种设计模式-装饰模式

装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类;是继承的替代方案,装饰模式应该为所装饰的对象增强功能装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为。装饰模式是一种用于替代继承的技术,它通过一种无须定义子类的方式来给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系。在装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩充原有类的功能。

2025-09-04 09:25:27 1012

原创 23种设计模式-Proxy模式

代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。抽象对象角色:声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。目标对象角色:定义了代理对象所代表的目标对象。代理对象角色:代理对象内部含有目标对象的引用,从而可以在任何时候操作目标对象;代理对象提供一个与目标对象相同的接口,以便可以在任何时候替代目标对象。代理对象通常在客户端调用传递给目标对象之前或之后,执行某个操作,而不是单纯地将调用传递给目标对象。

2025-09-04 09:06:47 748

原创 23种设计模式-观察者模式

观察者模式定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式是一种对象行为型模式。Android 开发中一个比较典型的例子是点击监听器OnClickListener。

2025-09-03 16:04:34 902

原创 23种设计模式-适配器(Adapter)模式

适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。目标(Target)角色:这就是所期待得到的接口。注意:由于这里讨论的是类适配器模式,因此目标不可以是类。源(Adapee)角色:现在需要适配的接口。适配器(Adaper)角色:适配器类是本模式的核心。适配器把源接口转换成目标接口。显然,这一角色不可以是接口,而必须是具体类。

2025-09-03 15:32:26 670

原创 23种设计模式-原型模式

用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。Client : 客户端用户。Prototype : 抽象类或者接口,声明具备clone能力。ConcretePrototype : 具体的原型类.下面我们以简单的文档拷贝为例来演示一下简单的原型模式模式。

2025-09-03 15:02:35 906

原创 23种设计模式-Builder模式

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。Product 产品类 : 产品的抽象类。Builder : 抽象类, 规范产品的组建,一般是由子类实现具体的组件过程。ConcreteBuilder : 具体的构建器.Director : 统一组装过程(可省略)。电脑的组装过程较为复杂,步骤繁多,但是顺序却是不固定的。下面我们以组装电脑为例来演示一下简单且经典的builder模式。

2025-09-03 14:06:54 702

原创 23种设计模式-工厂方法模式

定义一个用户创建对象的接口,让子类决定将哪一个类实例化。工厂方法使一个类的实例化延迟到子类。Product : 产品的抽象类ConcreteProduct : 具体的产品Factory : 工厂的抽象类ConcreteFactory : 工厂的具体实现。

2025-09-02 18:30:34 686

原创 23种设计模式-抽象工厂模式

为创建一组相关或相互依赖的对象提供一个接口,而无需指定它们具体的类。AbstractProduct: 抽象产品类ConcreteProductA : 产品的具体实现AConcreteProductB : 产品的具体实现BAbstractFactory : 抽象工厂ConcreteFactory : 具体工厂实现。

2025-09-02 18:11:52 857

原创 23种设计模式-简单工厂模式

简单工厂模式又称为静态方法工厂模式,是由一个工厂对象决定创建哪一个产品类的实例。Product:产品的通用接口,定义产品的行为ConcreteProduct:具体产品类,实现了Product接口Creator:工厂类,通过静态工厂方法factory来创建对象。

2025-09-02 17:57:55 542

原创 23种设计模式-单例模式

定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。类型:创建类模式。

2025-09-02 16:56:39 723

原创 Android studio运行时日志中文乱码解决方法

点击Android studio开发工具栏的Help-Edit Custom VM Options....,Android studio会打开studio64.exe.vmoptions文件,在文件中添加-Dfile.encoding=UTF-8,然后点击File- Invalidate Caches / Restart.... 关闭并重启Android studio。

2024-07-24 09:36:16 1183

原创 Fragment中onActivityResult不回调的问题

Arouter改成这样既可,关键在于上下文 getActivity改为getFragment。

2023-07-31 18:00:47 316

原创 解决NestedScrollView、ScrollView加载完自动滑动至顶部或底部问题

很多小伙伴在使用以上两个布局时都会遇到切换用NestedScrollView 或ScrollView作为外层布局的页面时,内容自动上移了。上移的原因是NestedScrollView或ScrollView或自动滚动到获取了焦点的child view的位置。NestedScrollView、ScrollView内容上移原因。通过让其获取焦点来解决该问题。

2023-01-06 17:08:51 2172

原创 android textview限制显示几行+省略号

【代码】android textview限制显示几行+省略号。

2023-01-06 14:52:15 547

原创 Android提高Webview网页加载速度的方法

Android提高Webview网页加载速度的方法

2022-10-28 10:23:46 2382

原创 ViewPager + Fragment 数据刷新问题

【代码】ViewPager + Fragment 数据刷新问题。

2022-09-16 15:23:06 702

原创 用Gson解析数据为map,int值变double值问题

代码】用Gson解析数据为map,int值变double值问题。

2022-08-02 16:33:08 850

原创 Git中submodule的使用

面对比较复杂的项目,我们有可能会将代码根据功能拆解成不同的子模块。主项目对子模块有依赖关系,却又并不关心子模块的内部开发流程细节。这种情况下,通常不会把所有源码都放在同一个 Git 仓库中。有一种比较简单的方式,是在当前工作目录下,将子模块文件夹加入到 文件内容中,这样主项目就能够无视子项目的存在。这样做有一个弊端就是,使用主项目的人需要有一个先验知识:需要在当前目录下放置一份某版本的子模块代码。还有另外一种方式可供借鉴,可以使用 Git 的 功能,也是这篇文章的主题。实际上 Git 工具的 功能就是

2022-07-14 14:37:04 7814

原创 SeekBar设置android:thumb显示背景色

shape_progress_bgshape_progress_handlethumb图片显示背景色,使用android:splitTrack="false"即可。如果SeekBar 设置thumb 图片后,设置进度100%后,覆盖最右侧一部分,解决办法就是设置偏移量 android:thumbOffset="1dp"...

2022-07-11 15:50:41 1587

原创 打造永不崩溃应用

java层崩溃,可以捕获。通过捕获子线程和主线程的方法实现。方法如下:1.子线程捕获异常2.主线程捕获异常

2022-07-05 10:43:04 137

原创 BaseBottomSheetFragment嵌套RecyclerView滑动冲突

BaseBottomSheetFragment里面的如下代码会存在滑动冲突解决方法:

2022-06-27 15:00:50 834

原创 Android 获取应用签名证书的SHA1、SHA256和MD5

Android 获取应用签名证书的SHA1、SHA256和MD5

2022-06-22 16:27:03 1197

原创 Unable to extract the trust manager on Android10Platform

sslSocketFactory的参数由一个改为两个即可

2022-06-22 15:14:50 564

原创 Android library引用AAR

1.将AAR包放入library里面的libs文件夹里面2. library的build.gradle添加如下内容 3.主工程的build.gradle添加如下内容

2022-06-22 11:43:11 1654 1

原创 设置TextView滚动

设置TextView滚动

2022-06-10 13:57:18 739

原创 NestedScrollView 中嵌套 LinearLayout,使用layout_weight不生效

NestedScrollView继承于ScrollView,故添加属性android:fillViewport="true"即可

2022-06-07 11:01:06 396

原创 设置图片部分圆角

android设置图片部分圆角

2022-06-06 17:48:11 599

空空如也

空空如也

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

TA关注的人

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