美文网首页
设计模式之桥接模式

设计模式之桥接模式

作者: Tinyspot | 来源:发表于2023-07-13 20:19 被阅读0次

1. 桥接模式(Bridge Pattern)

  • Decouple an abstraction from its implementation so that the two can varyindependently.
  • 桥接模式使用组合关系将代码的实现层和抽象层分离,让实现层与抽象层代码可以分别自由变化
  • 桥接模式可替代多重继承

1.2 组成部分

抽象实现器 Implementor接口
具体实现器 ConcreteImplementor

2. 示例

@Test
public void test() {
    IPost simplePost = new SimplePost();
    Letter letter = new Letter(simplePost);
    letter.post();
}
public interface IPost {
    // 发送邮件
    void post();
}

public class SimplePost implements IPost {
    @Override
    public void post() {
        System.out.println("This is simple post");
    }
}

public class MarkPost implements IPost {
    @Override
    public void post() {
        System.out.println("This is mark post");
    }
}
public abstract class AbstractThing {
    private IPost post;

    public AbstractThing(IPost post) {
        this.post = post;
    }

    public void post() {
        post.post();
    }
}

public class Letter extends AbstractThing {
    public Letter(IPost post) {
        super(post);
    }
}

public class Parcel extends AbstractThing {
    public Parcel(IPost post) {
        super(post);
    }
}

说明:
先在功能类中选择一个具体的发送功能,再选择一个事物类,最后完成真正的发送过程

总结来说,桥接模式完成的是一个多条件选择问题。
假设有二维条件,分别有N1、N2个选择,桥接模式要求在第1维N1个条件中选择一个,在第2维N2个条件中选择一个,最后完成有效组合

3. 应用场景

3.1 JDK集合排序

public class Collections {
    default void sort(Comparator<? super E> c) {
        Object[] a = this.toArray();
        Arrays.sort(a, (Comparator) c);
        ListIterator<E> i = this.listIterator();
        for (Object e : a) {
            i.next();
            i.set((E) e);
        }
    }
}

集合对象排序是借助Arrays中的sort()方法完成的
从中也能分析出JDK设计人员的设计思想,即数组和集合类都有排序功能,必须实现数组排序算法;集合对象要先转换成数组,排序后,再填充集合对象即可

扩展:
运用桥接思想实现二分查找

@Test
public void demo() {
    List<String> list = Arrays.asList("111", "444", "555", "222", "444");
    MyList myList = new MyList(list);
    int i = myList.binarySearch("444");
    System.out.println(i);
}
public class MyList<T> {
    List<T> list;
    Object[] arr;

    /**
     * 在构造方法中直接将集合对象转为数组
     */
    public MyList(List<T> vec) {
        list = vec;
        arr = vec.toArray();
    }

    public void sort() {
        Arrays.sort(arr);
    }

    /**
     * 直接对排序后的数组二分查找
     * @param key 查找的值
     */
    public int binarySearch(T key) {
        int pos = Arrays.binarySearch(arr, key);
        return pos;
    }

    public void show() {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");
        }
    }

    /**
     * 将数组填充回集合
     */
    public void fill() {
        ListIterator<T> i = list.listIterator();
        for (int j = 0; j < arr.length; j++) {
            i.next();
            i.set((T) arr[j]);
        }
    }
}

相关文章

  • 设计模式之桥接模式

    设计模式之桥接模式 1. 模式定义 桥接模式又称柄体模式或接口模式,它是一种结构性模式。桥接模式将抽象部分与实现部...

  • Java设计模式——桥接模式

    Java设计模式之桥接模式 回顾 上一期分享了适配器模式,主要为了实现解耦 桥接模式 简介 桥接模式是对象的结构模...

  • 设计模式-桥接模式

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

  • 桥接模式

    设计模式:桥接模式(Bridge)

  • 设计模式之桥接模式

    设计模式之桥接模式 Intro 桥接模式(Bridge),将抽象部分与它的实现部分分离,使得它们都可以独立地变化。...

  • 设计模式——桥接模式

    设计模式——桥接模式 最近公司组件分享设计模式,然而分配给我的是桥接模式。就在这里记录我对桥接模式的理解吧。 定义...

  • 设计模式之桥接模式

    桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。优先使用对象的合成/聚合将有助于你...

  • 设计模式之桥接模式

    桥接模式:将抽象部分与他实现部分分离,使它们可以独立。 UML图: 使用场景:1、如果一个系统需要在构件的抽象化角...

  • 设计模式之桥接模式

    桥接模式 人的抽象类,这类人喜欢投资 美国人的投资方式 毁天灭地的中国大妈类,所到之处寸草不生 资产接口 , 具有...

  • 设计模式之桥接模式

    定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。下面用一个实例来说明下这个模式,例如。我们要绘制三个图...

网友评论

      本文标题:设计模式之桥接模式

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