自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Houlin的博客

做人如果没有梦想,跟咸鱼有什么分别

  • 博客(28)
  • 资源 (1)
  • 收藏
  • 关注

原创 设计模式之十七:访问者模式

在数据基础类里面有一个方法接受访问者,将自身引用传入访问者利用“双重分派”分派到实例内部,弥补Java多态中的方法重载时静态的,这一问题Java的方法重载是静态的:方法重载时,若参数有父类的,也有子类的,则按声明的类型调用,而不是实例的真正类型。eg. 对于重载的方法test(Father f)和test(Son s),若Father f = new Son();,调用test(f)则会以Father的类型传入。所以,用父类的引用无法代表子类的实例。但是this指针的类型是本类。事例需求:.

2022-03-25 21:11:06 1205

原创 设计模式之十六:命令模式

请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。把请求包装成命令。客户选择执行者,通过Command,让执行者执行命令。事例需求:软件的首页要展示商品列表,目前有“最热”和“最新”两个列表。但后期需要扩展。数据结构如图:接口及其代码如下:命令类:public interface Command { // 执行命令的方法 void execute();}public class HotComm.

2022-03-25 19:39:00 244

原创 设计模式之十五:观察者模式

对象件有一对多的关系。当一个对象被修改时,要自动通知依赖它的对象为了弱化对象之间的依赖事例需求:芒果没库存了,爱吃芒果的客户想要在芒果到货时收到短信通知数据结构如图:抽象类及其代码如下:观察者public abstract class Observer { public abstract void update();}public class CustomerObserver extends Observer { @Override public vo.

2022-03-25 18:06:20 288

原创 设计模式之十四:责任链模式

为请求创建了一个接收者对象的链,对请求的发送者和接收者进行解耦通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。事例需求:客户在支付订单时,可以享受多重优惠。数据结构如图:代码如下:public interface Discount { // 优惠后的实付金额。参数是优惠前的金额 float calculate(float payment);}public abstract class Multi.

2022-03-25 16:39:50 170

原创 设计模式之十三:策略模式

一个类的行为或其算法可以在运行时更改选择不同策略,来执行不同算法。通过注入对象,改变行为。此模式就是spring IOC思想事例需求:客户在支付订单之前,可以选择一种优惠策略。优惠有两种“满100减5”和“9折”数据结构如图:接口及其实现类代码如下:定义策略类,用实现类来实现具体策略public interface Discount { // 优惠后的实付金额。参数是优惠前的金额 float actualPayment(float payment);}publ.

2022-03-25 11:55:13 594

原创 设计模式之十二:模板方法模式

算法的流程、骨架在抽象类中已经固定,而将一些步骤延迟到子类中。使得子类可以不改变算法的结构即可重定义其中的某些特定步骤一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行事例客户买水果的流程:“提交订单->结算->支付”,而支付有三种方式:“线上、会员卡、现金”业务结构如图:抽象类及其实现类如下:public abstract class Shopping { // 模板方法是定义业务流程的,加final防止.

2022-03-25 10:50:19 385

原创 设计模式之十一:外观模式

隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口当访问流程复杂时,将系统融合成一个接口供外部使用,定义了系统的入口事例需求:客户下单了水果,需要经过“采摘->包装->送货”三个流程。若客户直接访问这三个流程,调用繁琐而且对外暴露了其他无用的成员。需要封装数据结构如图:接口及其实现类如下:public interface PickService { void pick(); // 实现类 class PickServiceImpl i.

2022-03-24 18:17:17 652

原创 设计模式之十:组合模式

把一组结构相似的对象,当做一个单一的对象。为减少数据类型,简化项目结构用于嵌套的树型数据结构,将其抽象成统一的数据结构事例需求:水果订单支持送货,需要建立一个收货地址的数据结构数据结构如图抽象类及实现类代码:public abstract class Node { private String addressName; private List<Node> mList; public Node(String addressName) { .

2022-03-24 17:06:00 377

原创 设计模式之九:代理模式

在访问一个对象时进行控制代理类作为A访问B的中间层(访问层),而不是A直接访问B事例需求:水果订单有本地仓库订单和第三方仓库订单两种,且第三方订单需要作访问控制数据结构如图接口及其实现类:public interface OrderService { void order();}// 本地仓库订单public class OrderServiceImpl implements OrderService { @Override public void orde.

2021-09-26 16:09:26 105

原创 设计模式之八:装饰器模式

向一个现有的对象添加新的功能,同时又不改变其结构用装饰类来包装原有的类(通过组合,而不是继承),提供额外的功能。事例需求:水果包装进行打包后,分别增加防伪、加固、加急的功能功能如图数据结构如图装饰类:装饰类要继承被装饰类Bag,这样才能代替被装饰类public abstract class BagDecorator implements Bag { protected Bag mBag; public BagDecorator(Bag bag) { .

2021-09-26 11:49:57 92

原创 设计模式之七:桥接模式

将抽象部分与实现部分分离,使它们都可以独立的变化将继承关系转换成组合关系事例需求:装水果的包装有两个维度的分类,大小和材质存在的问题:要创建所有种类的包装,需要有3*2=6个类。且每新增一个分类,类的数量就会乘积式增长种类的组合如图解决问题:从每个维度入手,以大小为主要维度用抽象类BagAbstraction表示,材质维度用接口Material表示BagAbstraction中持有Material对象即可结构如图:数据结构如下:只形成数据的抽象部分// 材质public .

2021-09-25 20:26:56 74

原创 设计模式之六:适配器模式

适配两个不兼容的接口将A接口转换成B接口事例需求:桔子包装用光了,想要用苹果包装来代替桔子包装。即AppleBag转换成OrangeBag结构如图目标类(桔子包装):public class OrangeBag implements Bag { @Override public void pack() { System.out.println("orange bag pack"); }}源类(苹果包装):public class Apple.

2021-09-25 16:43:09 83

原创 设计模式之五:单例模式

确保一个类只有一个实例private构造方法、用private static字段持有实例、用public static方法提供访问实例的入口分类饿汉式:饿怕了,所以先把饭做好懒汉式:懒惯了,所以在需要的时候再做饭饿汉式初级饿汉式类被加载时,就会创建实例。代码中第一次使用Singleton时,该类被加载public class Singleton { private static Singleton instance = new Singleton(); priva.

2021-09-18 19:00:24 79

原创 设计模式之四:建造者模式

建造者模式中,调用Builder来生产的是导演类Director产品宏观上复杂(产品之间的关系)=>工厂模式产品微观上复杂(产品内部结构)=>建造者模式

2021-09-18 16:51:32 69

原创 设计模式之三:抽象工厂模式

将多个工厂合并成一个,完成一系列多种实体的生产如果说一个实体接口代表一种实体那么简单工厂模式就是一种实体对应一个工厂,多种实体就需要多个工厂当不同种类的实体有对应关系时,就可以合并成一个工厂事例每种水果都有自己的包装实体关系如图:实体类public interface Bag {}public class AppleBag implements Bag {}public class OrangeBag implements Bag {}工厂类public inter.

2021-09-17 17:06:06 116 1

原创 设计模式之二:工厂方法模式

每个实体类都有自己的工厂事例项目结构如图:实体类public interface Fruit {}public class Apple implements Fruit {}public class Orange implements Fruit {}工厂类public interface FruitFactory { Fruit getFruit();}public class AppleFactory implements FruitFactory {

2021-09-17 16:11:21 64

原创 设计模式之一:简单工厂模式

也称“静态工厂模式”。不属于23中设计模式,但是所有工厂模式的基础就是一个静态工具类,用来创建一个接口下实现类的实例事例要生产的类public interface Fruit {}public class Apple implements Fruit {}public class Orange implements Fruit {}静态工厂类public class StaticFactory { public static final int TYPE_APPLE.

2021-09-17 15:43:17 65

原创 设计模式及其六大原则_简要

设计模式是解决问题的思想六大原则单一职责原则一个类只负责一项职责依赖倒置原则面向接口编程接口不变,实现类可以变开闭原则对扩展开放,对修改关闭在宏观的项目结构上,新功能不去修改已有的代码(也是面向对象的编程思想)里氏替换原则子类可扩展父类,但不要改变父类原有功能(即重写父类方法)接口隔离原则设计接口时功能尽量细粒度,最小功能单元这样添加业务时,多implements接口即可,而不是修改接口迪米特原则降低耦合局部变量不要引入新的类,否则类的结构上看不到该类,却要依赖该类名.

2021-09-16 18:07:00 166

原创 注解与反射

注解本身没有任何意义,单独的注解就是一种注释,他需要结合其他如反射、插桩等技术才有意义。是一种注释机制,与泛型一样是JDK1.5引入的// 元注解:注解上的注解@Target(ElementType.TYPE)// Retention@Retention(RetentionPolicy.SOURCE)// 声明了注解Lancepublic @interface Lance { // 声明注解的元素,写法类似于接口的方法 int id(); // 使用default指定默认值 Strin

2021-07-08 22:09:53 176

原创 Java泛型

泛型即“参数化类型”,将类型参数化作用/好处:在编译期就进行类型检查,而不是在运行时。避免了类型转换的代码和强转可能导致的运行时错误。增加代码复用性泛型可声明在:泛型类泛型接口泛型方法有尖括号才是泛型的声明,没有<>则是泛型的使用实现泛型接口有两种:未传入泛型实参,实现类则是泛型类class ImplTest<T> implements Test<T>传入泛型实参class ImplTest implements Test&.

2021-07-06 12:14:00 80

原创 Windows下编译安装FFmpeg

安装CygwinCygwin类似于linux模拟器64位安装包下载https://cygwin.com/setup-x86_64.exe,32位安装包下载http://www.cygwin.com/setup-x86.exe一直下一步。但是要安装所需的包:在Select Packages这一步的"View"下拉框选"Full",搜索以下包并在"New"下拉框选择要安装的版本:gcc-coregcc-g++makecmakeautomakegdbnasmyasmwget安装ap

2021-05-02 16:59:50 448

原创 mac下apk的反编译、修改源码、重新打包

因业务需求,需要修改第三方apk(无源码)的逻辑。请大家不要用此方法对apk做恶意修改,维护世界和平。下载相关工具Apktool: 反编译apk的工具https://ibotpeaches.github.io/Apktool/install/根据安装向导,完成安装dex2jar: 将dex转换成class文件的工具https://sourceforge.net/projects/de...

2019-01-28 18:06:02 4386 2

原创 Android与React Native通信、互相调用

本文仅用于帮助Android开发者对接RN项目打开React Native项目搭建React Native开发环境使用Android Studio打开RN项目下图是RN项目的目录结构:RN项目下的android目录才是Android的项目结构,使用Android Studio打开该目录即可。RN调用Android新建class继承ReactContextBaseJavaM...

2018-09-22 10:13:47 2096

原创 Android事件总线EventBus 3.0的基本使用

Android组件间、线程间的通信,可以用Handler,BroadcastReceiver,回调等方法来实现,但是这些方法的实现有些繁琐。EventBus可以完成以上所有功能,并采用了“订阅/发布模式”,使代码更优雅、更好的解耦。相似的框架还有Otto、RxBus等,今天先来讲讲EventBus的基本使用。

2017-09-15 16:09:11 317

原创 Android蓝牙BLE开发(一)-基本原理

公司有需求要做蓝牙BLE传输,经查阅后发现关于BLE开发的知识还真不多。对于BLE开发的同学来说,我的建议是先快速了解一下BLE的基本原理,磨刀不误砍柴工。什么是BLEBLE全称Bluetooth Low Energy,即蓝牙低功耗。蓝牙4.0才支持BLE,蓝牙4.0向下兼容,包括传统蓝牙技术、高速技术和低耗能技术三种规格。主要用于手机与周边设备进行通信,当然也可以用于所有BLE设备之间的通信。

2017-09-15 16:04:32 5361 2

原创 Android电视TV盒子开发——常用ADB命令

目前智能电视(TV)、盒子(机顶盒)基本都是Android系统,所以开发盒子app的重任自然就会落到我们这些苦逼Android程序员身上。PS:目前盒子的Android版本绝大部分还都是在6.0以下,所以不需要加入运行时权限的检查,嘿嘿。为何使用ADB开发手机app时,调试程序都是用USB数据线直连就OK了。但是盒子由于各种原因(比如没有USB接口等),不能用数据线调试,这时候ADB就派上用场了。前

2017-09-15 16:01:21 20775 2

原创 Java-四种引用和ReferenceQueue简述

熟悉Java的四种引用和ReferenceQueue,可以帮助解决缓存和内存泄漏等问题。

2017-09-14 23:28:13 2518

原创 Android屏幕适配-官方文档

本文是关于屏幕适配的官方文档,包含每个文档的内容以及文档地址,以便快速查阅。

2017-09-05 23:39:12 408

明华URF-R330 IC卡智能卡读写器 开发包

明华URF-R330 IC卡智能卡读写器 开发包

2022-04-11

空空如也

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

TA关注的人

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