Java设计模式-结构性设计模式(桥接设计模式)

简介

1、适配器模式类似,包括以后经常会遇到意思接近⼀样的设计模式,因为⼤神往往就是多个模式混⽤,且根据不同的场景进⾏搭配,桥接设计模式也是结构型模式
2、将抽象部分与实现部分分离,使它们都可以独⽴的变化
3、通俗来说,是通过组合来桥接其它的⾏为/维度

应用场景

1、系统需要在构件的抽象化⻆⾊和具体化⻆⾊之间增加更多的灵活性
2、不想使⽤继承导致系统类的个数急剧增加的系统
3、有时候⼀个类,可能会拥有多个变化维度,⽐如啤酒,有不同的容量和品牌,可以使⽤继承组合的⽅式进⾏开发,假如维度很多,就容易出现类的膨胀,使⽤桥接模式就可以解决这个问题,且解耦

业务背景

我们需要构建⼀个⼿机类,我们知道⼿机有很多品牌,苹果、华为等,从另外⼀个颜⾊维度,⼜有多种颜⾊,红、⻩、蓝等,那如果描述这些类的话,传统⽅式就直接通过继承,就需要特别多的类,品牌2,颜⾊3,就是6个类了,如果后续再增加品牌就更多了,类数⽬将会激增,即所谓的类爆炸使⽤桥接模式就可以解决这个问题,且灵活度⼤⼤提⾼

使用桥接前的图例
在这里插入图片描述
使用桥接后的图例
在这里插入图片描述
demo
创建颜色接口


/**
 * 抽象角色 手机
 */
public interface Color {
    
    
    void useColor();
}

创建手机抽象类

public abstract class Phone {
    
    


    /**
     * 通过组合的方式来桥接其他行为
     */
    protected  Color color;


    public void setColor(Color color) {
    
    
        this.color = color;
    }

    /**
     * 手机的方法
     */
    abstract public void run();

}

创建苹果手机


/**
 * 手机实例化
 */
public class ApplePhone extends Phone {
    
    


    public ApplePhone(Color color){
    
    
        super.setColor(color);
    }
    @Override
    public void run() {
    
    
        color.useColor();
        System.out.println("苹果手机");
    }
}

创建华为手机

/**
 * 手机实例化
 */
public class HWPhone extends Phone {
    
    


    public HWPhone(Color color){
    
    
        super.setColor(color);
    }
    @Override
    public void run() {
    
    
        color.useColor();
        System.out.println("华为手机");
    }
}

创建红色

public class RedColor implements Color {
    
    
    @Override
    public void useColor() {
    
    
        System.out.println("红色");
    }
}

创建黄色

public class YellowColor implements Color {
    
    
    @Override
    public void useColor() {
    
    
        System.out.println("黄色");
    }
}

测试

public class Main {
    
    

    public static void main(String[] args) {
    
    


        HWPhone yellowHwPhone = new HWPhone(new YellowColor());
        yellowHwPhone.run();
        
        ApplePhone applePhone = new ApplePhone(new RedColor());
        applePhone.run();

    }
}

结果

黄色
华为手机
红色
苹果手机

优点

1、抽象和实现的分离
2、优秀的扩展能⼒,符合开闭原则

缺点

1、增加系统的理解与设计难度
2、使⽤聚合关联关系建⽴在抽象层,要求开发者针对抽象进⾏设计与编程,⽐如抽象类汽⻋,⾥⾯聚合了颜⾊类,有点像对象适配器

总结和对⽐

按GOF的说法,桥接模式和适配器模式⽤于设计的不同阶段

1、桥接模式⽤于设计的前期,精细化的设计,让系统更加灵活
2、适配器模式⽤于设计完成之后,发现类、接⼝之间⽆法⼀起⼯作,需要进⾏填坑

适配器模式经常⽤在第三⽅API协同⼯作的场合,在功能集成需求越来越多的今天,这种模式的使⽤频度越来越⾼,包括有些听过 外观设计模式 ,这个也是某些场景和适配器模式⼀样

猜你喜欢

转载自blog.csdn.net/csdn_mycsdn/article/details/129364201
今日推荐