Android开发经验谈Android开发Android技术知识

Android的设计模式-桥接模式

2018-01-05  本文已影响552人  四月葡萄

前言

Android的设计模式系列文章介绍,欢迎关注,持续更新中:

Android的设计模式-设计模式的六大原则
一句话总结23种设计模式则
创建型模式:
Android的设计模式-单例模式
Android的设计模式-建造者模式
Android的设计模式-工厂方法模式
Android的设计模式-简单工厂模式
Android的设计模式-抽象工厂模式
Android的设计模式-原型模式
行为型模式:
Android的设计模式-策略模式
Android的设计模式-状态模式
Android的设计模式-责任链模式
Android的设计模式-观察者模式
Android的设计模式-模板方法模式
Android的设计模式-迭代器模式
Android的设计模式-备忘录模式
Android的设计模式-访问者模式
Android的设计模式-中介者模式
Android的设计模式-解释器模式
Android的设计模式-命令模式
结构型模式:
Android的设计模式-代理模式
Android的设计模式-组合模式
Android的设计模式-适配器模式
Android的设计模式-装饰者模式
Android的设计模式-享元模式
Android的设计模式-外观模式
Android的设计模式-桥接模式

1.定义

将抽象部分与实现部分分离,使它们都可以独立的变化。

2.介绍

3.UML类图

桥接模式UML类图.jpg
角色说明:

4.实现

这里以穿衣服为例,不同职业的人可能要穿的衣服不一样。

4.1 创建实现化角色

定义一个衣服接口:

    interface Clothes {
        String getName();
    }
4.2 创建具体实现化角色

创建两种衣服类:校服和衬衫。

    public class Uniform implements Clothes {

        @Override
        public String getName() {
            return "校服";
        }
    }

    public class Shirt implements Clothes {

        @Override
        public String getName() {
            return "衬衫";
        }
    }
4.3 创建抽象化角色

定义一个人物类,有一个穿衣服的方法,并且持有衣服类的引用。即抽象化角色持有实现化角色的引用,可以调用实现化角色的方法,达到桥接的作用。

     public abstract class Person {
        Clothes mClothes;//持有衣服类的引用

        public void setClothes(Clothes clothes) {
            mClothes = clothes;
        }

        protected abstract void dress();//穿衣服
    }
4.4 创建具体抽象化角色

这里有两种角色穿衣服:学生和程序员。

    public class Student extends Person {

        @Override
        protected void dress() {
            System.out.println("学生穿上" + mClothes.getName());
        }
    }

    public class Coder extends Person {

        @Override
        protected void dress() {
            System.out.println("程序员穿上" + mClothes.getName());
        }
    }
4.5 客户端测试:
     public void test() {
        //创建各种衣服对象
        Clothes uniform = new Uniform();
        Clothes shirt = new Shirt();
        
        //不同职业的人穿衣服
        Person coder = new Coder();
        coder.setClothes(shirt);
        coder.dress();

        System.out.println("--------------------------------------");
        Person student = new Student();
        student.setClothes(uniform);
        student.dress();

        System.out.println("--------------------------------------");
        student.setClothes(shirt);
        student.dress();
    }
输出结果:
程序员穿上衬衫
--------------------------------------
学生穿上校服
--------------------------------------
学生穿上衬衫

4.6 其他说明:

通过上面的例子可以看到,我们分离了两端的变化。新增衣服和新增职业都变的非常简单。假如我们再增一个维度的变化,例如加个年龄来区分怎么办?这时我们就可以把Person类作为实现化角色,把不同年龄段作为抽象化角色,代码就不写了,有兴趣可以去实现一下。

5. 应用场景

6. 优点

7. 缺点

8. Android中的源码分析

桥接模式在Android中的源码应用还是非常广泛的。比如AbsListViewListAdapter之间就是一个桥接模式。

8.1 AbsListView 与 ListAdapter 之间的桥接模式

相关代码就不贴了,看下它们的UML类图就明白了。


AbsListView 与 ListAdapter 之间的桥接模式.png

这里AbsListView是抽象化角色,ListAdapter则是实现化角色。

8.2 其他

另外,WindowWindowManager 之间也是桥接模式。有兴趣的可以去看下源码体会体会。

相关文章阅读
Android的设计模式-设计模式的六大原则
一句话总结23种设计模式则
创建型模式:
Android的设计模式-单例模式
Android的设计模式-建造者模式
Android的设计模式-工厂方法模式
Android的设计模式-简单工厂模式
Android的设计模式-抽象工厂模式
Android的设计模式-原型模式
行为型模式:
Android的设计模式-策略模式
Android的设计模式-状态模式
Android的设计模式-责任链模式
Android的设计模式-观察者模式
Android的设计模式-模板方法模式
Android的设计模式-迭代器模式
Android的设计模式-备忘录模式
Android的设计模式-访问者模式
Android的设计模式-中介者模式
Android的设计模式-解释器模式
Android的设计模式-命令模式
结构型模式:
Android的设计模式-代理模式
Android的设计模式-组合模式
Android的设计模式-适配器模式
Android的设计模式-装饰者模式
Android的设计模式-享元模式
Android的设计模式-外观模式
Android的设计模式-桥接模式

上一篇下一篇

猜你喜欢

热点阅读