使用Jetpack的Architecture工具降低Android开发中的耦合度

简单项目示例地址——https://github.com/ayang818/AndroidRookie
写这篇文章并不是因为要转android了(从大一上的时候光速学了三天,糊弄了一下android课的作业后就再没写过了QAQ),而是最近看到一篇关于在android使用MVC,MVP,MVVM的架构方法的文章,感觉写的很好,就想来自己试一试android的几种解耦方法,触类旁通嘛~。此处也花了几个小时顺便快速学了一下android和其算是趋势的jetpack,故作此博客。

在编写Android代码的时候很容易在一个activity中就编写出耦合度特别高的代码,导致项目不利于维护。下面是几种常见的解决方案解决方案:

使用CGlib实现动态代理模式

前言

关于代理模式和使用JDK dynamic proxy实现的动态代理模式,已经在使用JDK dynamic proxy实现动态代理模式写过了,也说了Spring5之前使用的代理就是JDK默认的动态代理。然后我自己最近也在写一个框架——Agito。在自己实现AOP特性的时候,感觉使用JDK自带的动态代理并不容易实现我的需求,所以在技术选型的时候,我选择了CGlib这个字节码增强利器来实现动态代理。

使用JDK dynamic proxy实现动态代理模式

代理模式

代理模式理解起来很简单,比如说我有一个接口叫做Hello

public interface Hello {
void say();
}

他的实现类是HelloImpl

public class HelloImpl implements Hello {
@Override
public void say() {
System.out.println("hello world");
}
}

但是我又想在say()调用前做些什么,这里其实很关键,因为你找到了一个切点,这就是AOP——面向方面编程的特征,这个待会再说。想加新的功能,但是我们都学过开闭原则,所以我们打算再创建一个代理类来实现这一功能(组合)

public class HelloProxy implements Hello {
private Hello hello;

public HelloProxy() {
hello = new HelloImpl();
}

@Override
public void say() {
System.out.println("start");
hello.say();
System.out.println("end");
}
}

然后运行试下

public static void main(String[] args) {
Hello hello = new HelloProxy();
hello.say();
}

结果就是

start
hello world
end

这样看着既简单,又实现了需要的功能,似乎已经满足我们的需求了。这种方式叫做静态代理。

设计模式(5)——观察者模式

观察者模式是什么

一句话,观察者模式(Observer Pattern)就是一种 “发布者-订阅者” 的模式。有时也被称为 “模型-视图”模式、“源-监听者”模式等。在这种模式中,由一个目标对象来管理所有依赖与它的观察者对象,并且当这个目标对象自身发生改变时,会主动向它的观察者们发出通知。

类比举例

比如你最近在追一个美剧《生活大爆炸》,假设著名在线视频网站某狐买下独家版权,在线更新与播放。于是你天天等啊等啊,等它的更新通知一来,你就去看那些最新的视频。

设计模式(4)——装饰器模式

装饰器模式

在接触Java之前,我接触过Python,在python中其实就有装饰器这个说法,装饰器模式的意思也差不多,就是动态的将新的职能附加到已有对象上,实现功能拓展。在阿里巴巴Java开发手册中其实有这么一段话

他告诉我们聚合和组合是要优先于继承的,若要使用继承,必须符合里氏代换原则。目的就是方便解耦。

设计模式(3)——适配器模式

什么场景需要使用适配器模式?

顾名思义,适配器模式(Adapter Pattern)当然是用来适配的啦。当你想使用一个已有的类,但是这个类的接口跟你的又不一样,不能拿来直接用,这个时候你就需要一个适配器来帮你了。

设计模式(2)——工厂模式

为什么要有工厂模式

工厂模式属于设计模式中创建型模式中的一种。 他的主要目的还是用来创建对象。只是工厂方法不会对调用者暴露创建的逻辑,只要你调用了某个工厂方法方法,我就根据参数返回你需要的对象。工厂模式分为三类,

  • 普通工厂模式
  • 多个工厂模式
  • 静态工厂模式
  • 抽象工厂模式

举例

例如我先在有两个类,一个是Man,一个是Women,他们都直接实现了Human这一接口

Human.java

public interface Human {
void eat();
void run();
}

设计模式(1)

什么是设计模式

在软件工程中,设计模式是对软件设计中普遍存在的问题,所提出的解决方案。使用设计模式是为了可重用代码,让代码更有可读性,同时具有更好的可靠性。

设计模式原则

  1. 开闭原则
    开闭原则的意思是:对拓展开放,对修改封闭。在程序需要拓展时,不能去修改或影响已有的代码,实现一个热插拔的效果,达到了增强程序的拓展性的效果。想要达到这种效果,我们需要使用接口和抽象类。

从一个容器安全类引入单例模式

使用客户端加锁的Vector的复合操作

使用枚举来定制通用的异常处理机制

在我们开发一款应用时,往往会需要处理许许多多的Exception,有时候你需要把定制一些异常然后抛出,并且有些异常是需要用户知道的。这个时候手动写异常信息就显得非常的没有复用性。我们往往可以通过Enum来实现这一复用异常的需求。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×