出于对设计模式的学习复习,才决定写的这一系列文章,一方面是帮助自己更快的复习记忆,另一方面是帮助有需要的人快速入门,分享自己的学习内容吧。
图片来源网络
概念和目的
设计模式是众多经验丰富的工程师经过大量的实验花费了很多很多时间才总结出来的,可以说是众多经验的结晶了。在所有的中、大型项目中,设计模式随处可见。使用设计模式,是为了提高代码的可重用性、可读性以及可靠性。适当的使用设计模式可以为日后扩展节省不少工作量,尽可能避免未知bug,提升项目性能。
设计原则
理所当然的,所有的设计模式首先都应该需要遵从的必须是程序开发的六大原则了。如果你对六大原则还不理解,可以看看这篇文章帮你快速了解:最通俗易懂的java 六大原则--代码解析。
分类
设计模式有20余种,可分为:
桥接器模式
下面将讲解桥接器模式,分为:
1、概念解析
2、代码讲解
3、核心思想
4、优缺点
概念解析
桥接器属于结构型模式,结构型模式更关注的是类和对象的组合。官方说明:将抽象化与实现化解耦,使二者可以独立的变化。
这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
本人理解:该设计模式符合依赖倒置原则,我们要面向接口编程,而不是面向具体的类编程。我们在项目中写某个类X时,可能会使用一些类,比如A和B,但是到底用哪个,可能会变化,就是根据类X的使用场景,可能会调用A,也可能调用B,这时候吧她俩的要调用的都抽出来,整合成一个接口Interface,这样我们可以直接直接使用Interface的方法,以此达到去动态的改变到底用哪个类A或B的问题。当然,我们的类X此时是抽象类的,使用依赖注入的方式持有接口类。并且该抽象类有一个方法时调用内部的接口类的方法的。这样只需要实现一个类继承X,就可以使用类A或者类B了,并且A,B是实现类,他们的变化和抽象类X无关,抽象类子类的变化也和实现类无关。
来张图理解下:
代码讲解
/**
* create time on 2019/6/14
* function: 接口类,是对实现类的抽象化接口
*/
public interface IBaseInterface {
//抽象粗来的公共方法
String publicMethor();
}
/**
* create time on 2019/6/14
* function: 实现类A
*/
public class BaseInterImpleA implements IBaseInterface {
@Override
public String publicMethor() {
return "我是实现类A";
}
}
/**
* create time on 2019/6/14
* function:实现类B
*/
public class BaseInterImpleB implements IBaseInterface {
@Override
public String publicMethor() {
return "我是实现类B";
}
}
/**
* create time on 2019/6/14
* function: 抽象类,这个就是桥了
*/
public abstract class BaseUtilX {
private IBaseInterface iBaseInterface;
//依赖注入方式获取接口类
public BaseUtilX(IBaseInterface iBaseInterface) {
this.iBaseInterface = iBaseInterface;
}
public String useMethor() {
return iBaseInterface.publicMethor();
}
public IBaseInterface getiBaseInterface(){
return iBaseInterface;
}
}
/**
* create time on 2019/6/14
* function: 桥的具体类
*/
public class UtilsX extends BaseUtilX {
public UtilsX(IBaseInterface iBaseInterface) {
super(iBaseInterface);
}
@Override
public String useMethor() {
//下面这么写我觉得是为了告诉开发者这里可以后期改,比较灵活些,比如接口类不止一个方法嘞~对吧~
//return super.useMethor();
return getiBaseInterface().publicMethor();
}
}
//调用
BaseUtilX baseUtilX = new UtilsX(new BaseInterImpleA());
Log.i(TAG, "onCreate: "+baseUtilX.useMethor());
最后输出:
注释在代码上有哦~复制到自己Android studio上跑一遍理解下。栗子比较简单~
核心思想
简单来说一般我们是使用具体的类去依赖注入接口类,但是这里多了个抽象类依赖注入。然后我们使用抽象类调用接口类方法。这就是桥接器模式了。
优缺点
优点:可扩展性高,实现抽象与实现的解耦。
缺点:增加对系统的理解难度,尤其是如果在开发初期就想到使用该设计模式,需要考虑针对实现的可能做出抽象接口。
更多设计模式可以看看博主的设计模式系列哦~