设计模式——桥接模式

设计模式

桥接模式

基本介绍

桥接模式属于结构型模式。它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

主要解决问题

避免使用继承导致的类爆炸问题,提供更灵活的扩展方式。

使用场景

当系统可能从多个角度进行分类,且每个角度都可能独立变化时,桥接模式是合适的。

示例场景描述

制造两款手机:小米红色手机和小米白色手机

示例代码

普通实现
手机接口

package bridge;

public interface Phone {
    void getstyle();

    void getColor();

    void getPhone();
}

小米红色手机

package bridge;

public class XiaomiRedPhone implements Phone {

    @Override
    public void getstyle() {
        System.out.println("制作小米型号过程");
    }

    @Override
    public void getColor() {
        System.out.println("调制红色颜色过程");
    }

    @Override
    public void getPhone() {
        getstyle();
        getColor();
        System.out.println("手机生产成功");
    }
}

小米白色手机

package bridge;

public class XiaomiWhitePhone implements Phone {

    @Override
    public void getstyle() {
        System.out.println("制作小米型号过程");
    }

    @Override
    public void getColor() {
        System.out.println("调制白色颜色过程");
    }


    @Override
    public void getPhone() {
        getstyle();
        getColor();
        System.out.println("手机生产成功");
    }
}

客户端

package bridge;

public class Client {
    public static void main(String[] args) {

        Phone phone1 = new XiaomiRedPhone();
        phone1.getPhone();

        Phone phone2 = new XiaomiWhitePhone();
        phone2.getPhone();
    }
}

结论:如果出现另一个品牌的手机,并且颜色也有红色和白色,又要创建两个对象。造成了类爆炸问题。
桥接模式
品牌接口

package bridge.improve;

public interface Brand {
    void run();
}

小米品牌手机制作

package bridge.improve;

public class XiaoMiBrand implements Brand {
    @Override
    public void run() {
        System.out.println("制作小米型号手机");
    }
}

颜色接口

package bridge.improve;

public abstract class Color {
    public void getColor(Brand brand) {
    }

    public void getPhone() {
        System.out.println("手机生产成功");
    }

    ;
}

红色接口实现

package bridge.improve;

public class RedColor extends Color {

    @Override
    public void getColor(Brand brand) {
        brand.run();
        System.out.println("调制红色颜色过程");
    }

}

白色接口实现类

package bridge.improve;

public class WhiteColor extends Color {

    @Override
    public void getColor(Brand brand) {
        brand.run();
        System.out.println("调制白色颜色过程");
        System.out.println("手机生产成功");
    }
}

客户端:

package bridge.improve;

public class Client {
    public static void main(String[] args) {
        Brand xiaoMiBrand = new XiaoMiBrand();
        
        RedColor redColor = new RedColor();

        WhiteColor whiteColor = new WhiteColor();

        redColor.getColor(xiaoMiBrand);
        redColor.getPhone();
        System.out.println("===============");

        whiteColor.getColor(xiaoMiBrand);
        redColor.getPhone();
        System.out.println("===============");

    }
}

结论:就算又出现一个品牌的手机,也只需要实现品牌接口就可以和颜色进行组合了,简单方便扩展性强,代码不冗余。

package bridge.improve;

public class HuaWeiBrand implements Brand{
    @Override
    public void run() {
        System.out.println("制造华为型号手机");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值