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 桥接模式

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