OOP设计原则之里氏替换原则(LSP)

by:leotse


net_secret

OOP设计原则之依赖倒置原则(DIP)中,我们介绍了OOP设计原则之一的DIP,这里我们将继续介绍另一个设计原则。

我们仍然先来看一个示例,在OOP设计原则之依赖倒置原则(DIP)中,我们使用到了加载Admob广告和Facebook Audience Network广告的例子,我们假定我们会在不同的场景下使用不同的广告源:用户设备上安装了Facebook、Messenger等APP时(Cond 1)请求Facebook
的广告,其他情况(Cond 2)请求Admob的广告。那么我们如何实现呢?

OOP设计原则之依赖倒置原则(DIP)

by:leotse

Program to an interface, not an implementation.

先不管DIP的定义,我们看一个例子,我们的APP需要使用Facebook Audience Network的广告实现应用内变现,一般的实现方式是(这里用Java实现):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class AdController{
...
public void display(){
FacebookAdManager fbAdManager = new FacebookAdManager();
fbAdManager.displayFbAd();
}
}

...

public class FacebookAdManager{
public void displayFbAd(){
...
}
}

这样的实现方式比较常见。这里我们抽象出两个模块,控制模块(AdController)以及广告加载模块(FacebookAdManager),两个模块之间的关系是处于高层的控制模块直接依赖于低层的广告加载模块,这也是我们在传统的应用架构中见得比较多的一种代码依赖关系,就像楼房的高层需要基于低层一样。

Android获取全局Context

by:leotse

在Android的开发中,我们经常需要在不同的场景中使用Context对象。比如,弹出一个Toast,启动一个Service或者一个Activity等等。

每个开发者都有自己的方法去获取Context,比较常见的是将Context作为一个参数传递到需要使用的方法,这种方法虽然可以实现这个目的,但是也存在着弊端,Context作为参数传递固然ok,但是需要我们在需要使用到Context的方法里都加上一个参数,这种做法并不优雅。

这时候我们有另一种办法去实现我们的目的,那就是在Application中定义一个静态方法,用以获取Context:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class MyApplication extends Application {

private static Context cxt;

@Override
public void onCreate() {
super.onCreate();

cxt = getApplicationContext();
}

public static Context getContext(){
return cxt;
}

}