设计模式——桥接模式

场景引入

假设这样一种场景:当你身边有朋友过生日时,你会去给他(她)挑选礼物。那么我们在选礼物时,肯定会根据朋友的性别来给朋友选礼物。如果朋友是女性,你就会挑选适合女生的礼物(WomenGift);如果朋友是男性,你就会挑选适合男生的礼物(ManGift)。但是具体的礼物,比如书(Book)、花(Flower)这种其实都是适合送给男生和女生的。但是女生和男生的花和书又有很大的不同。这时,就相当于构成了下图:
在这里插入图片描述如果按照只用继承去实现,那么就需要22=4的实现类,如果第一层的类别不断增加,比如有m种,第二层的类别也不断增大,比如有n种。那么就构成了nm种。再仔细看上图,如果我们分为两步来构建一个具体的类别,第一步是一层,第二层是第二层。这样就能使具体的实现类在很大的程度上进行缩减。只需要n+m个类就行实现。

代码实现

Gift

public abstract class Gift {
    GiftImplement giftImplement ;

    public Gift(GiftImplement giftImplement) {
        this.giftImplement = giftImplement;
    }

    public abstract void operate();
}

ManGift

public class ManGift extends Gift{
    public ManGift(GiftImplement giftImplement) {
        super(giftImplement);
    }

    @Override
    public void operate() {
        System.out.println("这是针对男性礼物的具体不一样操作");
        giftImplement.Name();
    }
}

WomenGift

public class WomenGift extends Gift{
    public WomenGift(GiftImplement giftImplement) {
        super(giftImplement);
    }

    @Override
    public void operate() {
        System.out.println("针对女生礼物的特定操作");
        giftImplement.Name();
    }
}

Book

public class Book implements GiftImplement{
    @Override
    public void Name() {
        System.out.println("我是一本书");
    }
}

Flower

public class Flower implements GiftImplement {
    @Override
    public void Name() {
        System.out.println("我是一朵花");
    }
}

Test

public class Test {
    public static void main(String[] args) {
        Gift gift = new WomenGift(new Book());
        gift.operate();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值