当前位置:   article > 正文

Java设计模式-桥接模式(Bridge Pattern)_bridge 模式 java 代码

bridge 模式 java 代码

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、桥接模式

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的圆。
意图: 将抽象部分与实现部分分离,使它们都可以独立的变化。

主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。

何时使用: 实现系统可能有多个角度分类,每一种角度都可能变化。

如何解决: 把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。

关键代码: 抽象类依赖实现类。

二、代码示例

模拟两个A,B公司生产和销售产品。
UML图

1.创建桥接实现接口

产品接口

/**
 * 提供一个接口,提供两个接口,生产和销售方法
 */
public interface Product {
    void produce();
    void sell();
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.创建接口实现类

A产品

public class AProduct implements Product{
    @Override
    public void produce() {
        System.out.println("生产产品A......");
    }

    @Override
    public void sell() {
        System.out.println("销售产品A......");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

B产品

/**
 * 生产B产品
 */
public class BProduct implements Product{
    @Override
    public void produce() {
        System.out.println("生产B产品......");
    }

    @Override
    public void sell() {
        System.out.println("销售B产品......");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3 使用接口创建抽象类


/**
 * 接口抽象类
 */
public abstract class Company {
    protected Product product;

    protected Company(Product product){
        this.product = product;
    }

    /**
     * 提供一个抽象方法
     */
    public abstract void produce();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

4 抽象实现类

A公司

/**
 * A公司
 */
public class ACompany extends Company {

    protected ACompany(Product product) {
        super(product);
    }

    @Override
    public void produce() {
       product.produce();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

B公司

/**
 * B公司
 */
public class BCompany extends Company {

    protected BCompany(Product product) {
        super(product);
    }

    @Override
    public void produce() {
        product.produce();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

5 测试


public class Client {
    public static void main(String[] args) {
        AProduct a = new AProduct();
        Company acompany = new ACompany(a);
        acompany.produce();

        BProduct b = new BProduct();
        Company bcompany = new BCompany(b);
        bcompany.produce();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

总结

业务抽象和业务实现,实现类间的类间解耦。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/940239
推荐阅读
相关标签
  

闽ICP备14008679号