桥接模式代码案例

桥接模式使用时需要先明确下列代码例子的用户类型和充值方式

复制粘贴代码执行一遍会比较清楚

/**
 * 一个充值功能,有用户类型(普通用户和vip用户给)充值和充值方式(银行充值和微信充值)
 * 正常情况。如果添加一种用户类型或充值方式需要添加多个类
 * 桥接模式解决:
 *  1.将用户类型当做接口,vip,普通用户实现这个接口
 *  2.将充值方式当抽象类,里面的属性包含了用户类型,且实现了充值功能,实际功能由用户类型实现类去实现
 */
public class ClientTopUp {
    public static void main(String[] args) {
        VipUser vipUser = new VipUser();
        TopUp vipTopUp = new BankTopUp(vipUser);
        System.out.println(vipTopUp.transferMoney(100));

        System.out.println("=================");
        NormalUser normalUser = new NormalUser();
        TopUp normalTopUp = new WeixinTopUp(normalUser);
        System.out.println(normalTopUp.transferMoney(100));
    }
}
abstract class TopUp {
    UserType userType;

    public TopUp(UserType userType) {
        this.userType = userType;
    }
    public double transferMoney(double money) {
        return userType.transferMoney(money);
    }
}
class WeixinTopUp extends TopUp {
    public WeixinTopUp(UserType userType) {
        super(userType);
    }
    public double transferMoney(double money) {
        System.out.println("使用微信充值,不送钱");
        return userType.transferMoney(money);
    }
}
class BankTopUp extends TopUp {
    public BankTopUp(UserType userType) {
        super(userType);
    }
    public double transferMoney(double money) {
        System.out.println("银行卡充值送5元");
        money = userType.transferMoney(money);
        money += 5;
        return money;
    }
}
interface UserType {
    public double transferMoney(double money);
}
class NormalUser implements UserType {
    @Override
    public double transferMoney(double money) {
        System.out.println("普通用户充值没有优惠");
        return money;
    }
}
class VipUser implements UserType {
    @Override
    public double transferMoney(double money) {
        double newMoney = money * 1.5;
        System.out.println("vip用户充钱送50%,原充值" + money + "元,实际充值" + newMoney + "元");
        return newMoney;
    }
}

// 如果没有不同的付款方式,也可以直接用这个对象
/*class TopUp {
    UserType userType;
    public TopUp(UserType userType) {
        this.userType = userType;
    }
    public double transferMoney(double money) {
        return userType.transferMoney(money);
    }
}*/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值