自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Intent Filter

我们都知道,Intent 可以分为两种类型,分别为显式和隐式。显示的调用也就是常使用的:Intent intent = new Intent(context,Activity.class);startActivity(intent);而隐式调用我们却很少用到,这是因为在我们自己的项目中,我们能够精准的控制可以跳转到的页面,所有的跳转都可以通过显式的Intent来完成,那么,当我们想要启动一个系统的界面,而我们又不知道这个系统界面的名称的时候,这个时候我们就会用到IntentFilter。Inte

2022-03-24 17:43:00 2551

原创 【原型模式】

原型二字表示该模式应该有一个样板实例,并通过复制这些实例的方法来创建新的对象。区别于new一个新的对象,clone实际上在在内存上以二进制流的方式完成实例的克隆。所以,就像C++的类的克隆函数一样,类的创建并不会执行构造函数,那么有人可能就要问了,那么我们如何初始化数据呢?答案是覆写clone方法,如下:public class Prototype implements Cloneable { private String mText; private ArrayList<Str

2022-01-17 09:47:53 195

原创 【RN中的数据类型与判空】

js中有六种数据类型,包括五种基本数据类型(Number,String,Boolean,Undefined,Null),和一种复杂数据类型(Object)。我们可以使用typeof操作符来判断响应参数的设备类型。let a = [];if ( typeof a === 'object' ) console.log('是object');需要注意的是,在js中,所以的聚合数据类型都是以object来表示,包括list,dic 和 set,那么,该如何区分list和dic呢?这里我们就要区分list和d

2022-01-12 15:11:00 1321

原创 【模板方法模式】

模板方法实际上时封装一个固定流程,就像执行一套执行模板一样,第一步该做什么,第二步该做什么,都已经在抽象类中定义好。而子类可以有不同的算法实现,在框架不被修改的情况下实现某种特定步骤的算法。在重构时,模板方法就是一个经常使用的模式,把相同的代码抽取到父类中,然后通过钩子函数约束其行为。public abstract class AbstractTemplate { public void stepA() {}; public void stepB() {}; public fin

2022-01-12 14:25:17 67

原创 【迭代器模式(了解即可)】

创建一个迭代器,并将一个容器类注入迭代器,使用迭代器这个中间件来实现对容器类的迭代操作迭代器模式又称为游标模式,它最早源于对容器类的访问。如果我们把遍历的方法放在容器中,那么对于容器类而言就承载了太多的功能,不太符合单一职责原则,而如果暴露给用户实现又会暴露对象的内部实现,因为,迭代模式应运而生,在访问类和容器类中插入了个第三者——迭代器。public class ConcreteIterator<T> implements Iterator<T> { private L

2022-01-12 14:13:57 94

原创 【状态模式与策略模式】

【状态模式】提到状态,首先应该想到的就是编译原理中的状态机,状态机的一个典型的特征就是处于不同的状态时遇到同义词时执行的操作不同。由此,我们可以很容易的类比出:当一个对象的行为取决于它的状态,并且它在处于不同状态下相同的行为执行的操作不同的话,我们就可以使用状态模式,将一种对象的n种状态封装成n个状态对象,该对象持有一个状态的引用,当执行某种操作导致状态发生变化时,将对象中状态的引用指向另一种状态,这样,对象的任意操作就只要委托给不同的状态对象即可。状态模式的简单实例如下所示:// 状态类clas

2022-01-12 14:12:36 304

原创 【命令模式】

命令模式即为把一个命令包装成一个请求,从而实现 调用方 和 实现方的弱耦合;同时,可以对请求进行排队和请求日志的记录,用于实现可撤销的操作和流程的控制。// 命令模式有三个角色:接收者,命令和请求者public class Receiver { public void action() {}}// 接收者就是执行具体逻辑的角色,任何一个类都可以作为接收者,而执行具体逻辑的方法被称为行动方法public interface Command { void excete();}p

2022-01-12 14:08:56 94

原创 【中介者模式】

在我们开发的过程中,一个类肯定会与其他类产生依赖关系,如果这个依赖关系如网状般复杂,那么就会导致代码的耦合度很高。提到中介,我们第一个应该想到的就是租房中介,那么我们就以租房中介来介绍中介者模式:假设有n个人想要租房,共找到m个房主,假设每一个人都把m个房子都看完再决定租哪个,那么整个系统共有(m* n)种依赖关系,这时我们引入一个租房中介,他负责与每个人和每个屋主交互,那么,这时就只有(m + n)种依赖关系,且所有的依赖关系都是和中介的依赖。( m + n < m * n m和n都为正整数,通过

2022-01-12 10:02:01 124

原创 【建造者模式】

建造者模式是一个一步一步创建一个复杂对象的设计模式。它可以在一个复杂对象执行相同的方法不同的顺序但是结果不同的特殊情况下对这个复杂对象的构造过程又更加精细的控制。它一般被用于以下两种情况:① 复杂的对象构建,多个函数,执行的顺序不同,产生的结果也不同的情况 ② 当一个对象初始化特别复杂但里面的各个成员变量都有默认值时。public class Builder { private Product mProduct; // Product类是产品类 Builder(Product produ

2022-01-12 10:00:09 60

原创 【单例模式】

单例模式即保证一个类只有一个实例,而且自行实例化并向整个系统提供整个实例。常见的有以下几种需要使用单例:(1)一个类只需要维持一个实例,可以减少内存的开支,同时提供一个全局的访问点便于控制,如用户的登录状态。(2)避免对资源的多重占用或访问安全,例如数据库单例类(3)在生成一些大对象的时候,减少性能的开销,例如线程池单例模式有以下几个关键点:(1)构造函数不对外开放,这样就没法通过new一个对象的方式来创建实例(TODO: 那么使用类加载器方式呢?),与之相对的,提供一个静态方法用于返回唯一的实

2022-01-12 09:46:20 65

原创 【工厂模式】

工厂模式是一种典型的创建者模式,当我们需要创建多个相似但是不同的(即都实现一个接口的类)实体类时,我们可以引入工厂类。工厂模式的引入主要是为了应对需求的变化,主要是基于“在创建一个对象时,需要把容易发生变化的地方给封装起来,来控制变化(哪里变化,封装哪里),以适应客户的变动,项目的扩展 ”的思想。按照抽象的层次从低到高分别是:简单工厂模式,工厂方法模式和抽象工厂模式。// 简单工厂模式class Factory { public static createProduct(Class<T

2022-01-12 09:43:39 60

原创 【责任链模式】

在实际编程开发的过程中,我们常常遇到这种情况,当一个请求到达后,我们需要一个分支很多,且每一个分支都很复杂的ifelse或switchcase语句。在这种情况下,如果我们想要增加新的分支,往往时比较复杂的,由此,我们引入责任链模式。责任链是一种类似于链表式结构,如果我们把链表每个节点可以看做一个Handler,每个Handler有不同的处理逻辑,将一个请求从链的首端发出,沿着链的路径依次经过每个Handler,直到有Handler处理这个请求为止,我们将这样一种模式称为责任链模式。// 抽象handle

2022-01-12 09:29:19 65

原创 【代理模式/装饰模式】

代理模式通常指为其他对象提供一种代理以控制对另一个对象的访问,简单的说,就是当我们无法或不能直接访问某个对象时可以通过一个实现了与该对象相同接口的一个类来实现对该类的间接访问。装饰模式是在代理模式的基础上进行扩展,增加一些被代理类不存在的类,以扩展被代理类的一些功能。这种扩展并不破坏原有类的功能。// 实现public interface Subject { public void method();};public class RealSubject { public void

2022-01-12 09:22:38 89

原创 【组合模式】

组合模式又称为部分整体模式,主要是为了处理树状的数据结构,提供一个统一的接口来屏蔽掉集合和个体之间的差异,以此忽略掉对象和对象集合之间的差异。例如:多级目录的显示就可以使用这种组合模式的数据结构。public abstruct class Component() { public abstruct addChild(); public abstruct doSomething();}public class Composite extends Component { priv

2022-01-12 09:18:58 101

原创 【适配器模式】

适配器模式实际上就是把两个不兼容的类融合在一起,简单的说来,就是如果把一个需要适配的类(Adaptee)通过适配器角色(Adapter)将其转化成目标角色(Target)。该模式一般用于处理接口不符合系统的需要,即接口不兼容的情况。打个比方说,当我们要访问的接口Target中没有我们想要的方法 ,却在另一个接口Adaptee中发现了合适的方法,我们又不能改变Targe,在这种情况下,我们可以定义一个适配器Adapter来进行中转。这个适配器Adapter要实现我们访问的接口Target,这样我们就能继

2022-01-11 16:59:09 126

原创 Android数据持久化

Android数据持久化Android中一般可以使用三种方式完成数据持久化功能:文件存储,SharePreferences存储和数据库存储。对于文件存储而言,实际上也就是java流的操作,用到的核心技术是Context类中提供的openFileInput和openFileOutput方法,它的根本劣势在于无法处理复杂的关系型数据,因此我们主要介绍SharedPreferences存储和数据库存储两种方式。SharedPreferencesSharedPreferences是使用键值对的方式进行存储的

2021-06-11 11:36:22 217 3

原创 RN与Android的交互

Android端接口RN端向Android侧通信可以通过Android侧的接口来实现。实现接口Android侧的接口都需要继承ReactContextBaseJavaModule类,如下:class MyModule extends ReactContextBaseJavaModule { @NonNull @Override public String getName() { return "MyModule"; } // 1 @ReactMethod

2020-12-05 10:55:03 1057

原创 RN——回调函数的多种书写方法

回调函数的多种书写方法回调函数存在多种书写方法,如下所示:<InputText onChangeText={(newText) => {this.update(newText)}} // 1 //onChangeText={this.update} 2 //onChangeText={this.update(newText)} 3/>最常见的是第一种写法。第二种写法,我们无法从代码上看到 newText参数的传递,但它还是被传递了,它的可读性会差一些。第二种写法的u

2020-12-04 17:29:43 1281

原创 RN——setState与状态机思维

state与状态机思维React将每一种UI的状态都看做为一个简单的状态机,那么任意一个UI场景就是状态机中的一种状态。(//TODO: 对于某些状态来说,状态的转化时危险的情况呢?)根据决定状态的状态机变量的值,React框架渲染出状态机的当前状态——对于开发者来说,单个UI场景就被渲染出来了。随着状态机变量值的变化,UI状态机也在不停的改变状态,UI场景也随着不断渲染。这样一个过程可以很轻松的做到数据与UI保持一致。在RN的开发中,开发者需要将状态机变量视为“不可变的常量”,在开发者的代码中,永远

2020-12-04 16:47:38 566

原创 RN react-navigation详解

react-navigation页面跳转也是根据路由来执行的,很意外的和ARouter的实现极其类似,只要在一个集中式的路由注册控制中进行相应的声明就可以做到,很简单。react-navigation 是目前RN官方建议使用的导航组件,它分为三种导航方式:栈式导航、标签导航和抽屉式导航。其中栈式导航和标签导航可以嵌套调用栈式导航——StackNavigator栈式导航就好像将一个个界面放入在一个栈中一样。只有在栈顶的界面对用户是可见的。它可以轻松的实现出Android的活动栈的效果。StackNav

2020-11-20 16:22:47 775

原创 Android获取Wifi的数据

Android获取Wifi的数据在anndroid中使用系統功能SystemService获取当前wifi状态。常用获取办法WifiManager wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);WifiInfo wifiInfo = wifiManager.getConnectionInfo();String ssid = wifiInfo.getSSID();然后可以使用currectWI

2020-11-17 08:47:07 1345

原创 RN BackHandler ——Android回退键自定义

【RN中自定义Android回退行为】在React-Native项目中为Android的返回键定义自定义的行为,BackAndroid控件已被禁用,所以使用BackHandler控件进行。简单使用BackHandler API 用于监听设备上的后退按钮事件,可以调用你自己的函数来处理后退行为。此 API 仅能在 Android 上使用。一般说来,我们为android键添加自定义的响应函数(例如,返回的时候弹出一个警示框告诉你要返回),只要在类中的注册对回退键的监听即可,如下面的代码段所示:class

2020-11-11 20:03:50 868

空空如也

空空如也

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

TA关注的人

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