Android 桥接模式

作者: Yink_Liu | 来源:发表于2019-02-23 13:43 被阅读12次

Android 23种设计模式

一、前言

Android桥接(Bridge)模式,又被称为桥梁模式。结构型模式之一。我们知道桥梁起到连接两岸的作用,而桥接模式的作用和这十分类似,就是连接抽象部分和实现部分。起到解耦的作用。

二、定义

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

三、例子

理论部分还是比较抽象,下面我举一个例子来说明什么是桥接模式,并在其中说明桥接模式的核心。例子是我们要给圆、正方形和长方形添加白色或黑色。

3.1、实现部分

我们实现出添加颜色,所以称之为实现部分,这里可以用接口,也可以用抽象类。笔者使用接口

public interface Color {
    public void coloring();
}

public class White implements Color {
    private static final String TAG = White.class.getSimpleName();

    @Override
    public void coloring() {
        Log.d(TAG,"模拟正在涂上白色...");
    }
}

public class Black implements Color {
    private static final String TAG = Black.class.getSimpleName();
    @Override
    public void coloring() {
        Log.d(TAG,"模拟正在涂上黑色...");
    }
}

这里说下为啥要写两个具体的类来表示白色或黑色,而不是写成一个类,既可以画白色也可以画黑色。首先:不要和安卓原生的Color类混淆。其次:这里主要是对白色或黑色进行一个抽象,假如你把它想成颜料,它们是具体的一个类。最后:如果二者写在一起,也等于多写了一个类来包含黑色和白色这两个类。

3.2、抽象部分

抽象出具体的事物:图形,并秒回具体的图形。此部分一般使用抽象类。

public abstract class Shape {
    protected Color color;

    public Shape(Color color) {
        this.color = color;
    }

    public abstract void draw();
}

正方形

public class Square extends Shape {
    private static final String TAG = Square.class.getSimpleName();

    public Square(Color color) {
        super(color);
    }

    @Override
    public void draw() {
        Log.d(TAG,"模拟正在画正方形...");
        color.coloring();
    }
}

长方形

public class Rectangle extends Shape {
    private static final String TAG = Rectangle.class.getSimpleName();

    public Rectangle(Color color) {
        super(color);
    }

    @Override
    public void draw() {
        Log.d(TAG,"模拟正在画长方形...");
        color.coloring();
    }
}

圆形

public class Circular extends Shape {
    private static final String TAG = Circular.class.getSimpleName();

    public Circular(Color color) {
        super(color);
    }

    @Override
    public void draw() {
        Log.d(TAG,"模拟正在画圆形...");
        color.coloring();
    }
}

桥接模式小结说明:
1、抽象和实现部分的区分
实现部分主要是对抽象化的事物进一步的具体化。这里就是对抽象化的图形进一步添加颜色。
2、桥接模式结构核心
抽象部分拥有实现部分实例,并调用实现部分实例的方法。
由以上构成桥接模式。
3、减少类的个数利于扩展,并且解耦。
首先有正方形、长方形和圆形,你还可以添加更多的图形。颜色也可以添加更多的颜色。我们把图形看成一个维度,颜色看成一个维度。如果不用桥接模式,你可能像下面这样写。你不单要为白色添加一个类,还得为黑色添加一个类。如果有更多的颜色。将成倍增长。桥接模式就分离这两个维度,使这两个维度独立。达到减少类的个数和解耦的作用。

public class Square extends Shape implements Color

3.3、调用

White white = new White();
Black black = new Black();

Square square = new Square(white);
Rectangle rectangle = new Rectangle(black);
Circular circular = new Circular(white);

square.draw();
rectangle.draw();
circular.draw();

输出

02-23 10:01:19.999 17899-17899/com.yink.designpattern.designpattern D/Square: 模拟正在画正方形...
02-23 10:01:19.999 17899-17899/com.yink.designpattern.designpattern D/White: 模拟正在涂上白色...
02-23 10:01:19.999 17899-17899/com.yink.designpattern.designpattern D/Rectangle: 模拟正在画长方形...
02-23 10:01:19.999 17899-17899/com.yink.designpattern.designpattern D/Black: 模拟正在涂上黑色...
02-23 10:01:19.999 17899-17899/com.yink.designpattern.designpattern D/Circular: 模拟正在画圆形...
02-23 10:01:19.999 17899-17899/com.yink.designpattern.designpattern D/White: 模拟正在涂上白色...

四、写在最后

1、桥接模式将抽象部分和实现部分分离,解耦
2、两个维度,独立变化
3、灵活的扩展,透明实现

相关文章

  • Android 桥接模式

    Android 23种设计模式 一、前言 Android桥接(Bridge)模式,又被称为桥梁模式。结构型模式之一...

  • java/android 设计模式学习笔记(8)---桥接模式

    java/android 设计模式学习笔记(8)---桥接模式 【备注】只用于个人收藏

  • Android设计模式-桥接模式

    UML关系简单介绍UML简单使用的介绍创建型设计模式Android设计模式-单例模式Android设计模式-工厂模...

  • Android 设计模式 - 桥接模式

    当一个类存在两个独立变化的纬度,且这两个纬度都需要进行扩展,我们可以使用桥接模式。下面来看看桥接模式的UML Ab...

  • Android设计模式:桥接模式

    定义 将抽象部分和实现部分分离,使它们都可以独立地变化。 简介 桥接模式属于结构性模式 通俗的表达:举个例子,一条...

  • Android的设计模式-桥接模式

    前言 Android的设计模式系列文章介绍,欢迎关注,持续更新中: Android的设计模式-设计模式的六大原则一...

  • Android设计模式之桥接模式

    桥接模式 1.定义: 将抽象部分与实现部分分离,使他们都可以独立的进行变化。 2.使用场景: 一个类存在着两个独立...

  • Android 设计模式之桥接模式

    在日常开发过程中时常需要用到设计模式,但是设计模式有23种,如何将这些设计模式了然于胸并且能在实际开发过程中应用得...

  • 设计模式-桥接模式

    设计模式-桥接模式 定义 桥接模式(Bridge Pattern)也称为桥梁模式、接口(Interface)模式或...

  • 结构型模式:桥接模式

    文章首发:结构型模式:桥接模式 七大结构型模式之二:桥接模式。 简介 姓名 :桥接模式 英文名 :Bridge P...

网友评论

    本文标题:Android 桥接模式

    本文链接:https://www.haomeiwen.com/subject/zxvuyqtx.html