文章目录
一、桥接模式
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的圆。
意图: 将抽象部分与实现部分分离,使它们都可以独立的变化。
主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。
何时使用: 实现系统可能有多个角度分类,每一种角度都可能变化。
如何解决: 把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。
关键代码: 抽象类依赖实现类。
二、代码示例
模拟两个A,B公司生产和销售产品。
1.创建桥接实现接口
产品接口
/**
* 提供一个接口,提供两个接口,生产和销售方法
*/
public interface Product {
void produce();
void sell();
}
2.创建接口实现类
A产品
public class AProduct implements Product{
@Override
public void produce() {
System.out.println("生产产品A......");
}
@Override
public void sell() {
System.out.println("销售产品A......");
}
}
B产品
/**
* 生产B产品
*/
public class BProduct implements Product{
@Override
public void produce() {
System.out.println("生产B产品......");
}
@Override
public void sell() {
System.out.println("销售B产品......");
}
}
3 使用接口创建抽象类
/**
* 接口抽象类
*/
public abstract class Company {
protected Product product;
protected Company(Product product){
this.product = product;
}
/**
* 提供一个抽象方法
*/
public abstract void produce();
}
4 抽象实现类
A公司
/**
* A公司
*/
public class ACompany extends Company {
protected ACompany(Product product) {
super(product);
}
@Override
public void produce() {
product.produce();
}
}
B公司
/**
* B公司
*/
public class BCompany extends Company {
protected BCompany(Product product) {
super(product);
}
@Override
public void produce() {
product.produce();
}
}
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();
}
}
总结
业务抽象和业务实现,实现类间的类间解耦。