【设计模式】桥接模式

桥接模式有效的避免了类爆炸,减少子类数量,利于扩展,在使用时需要明确系统中独立变化的两个维度,这也是使用桥接模式的前提条件。
package com.depthmind.designpattern;

public class BridgePattern {
    public static void main(String[] args) {
        User normalUser = new NormalUser(new OnlineTransfer());
        normalUser.transfer();
        User goldUser = new GoldUser(new ATMTransfer());
        goldUser.transfer();
    }
}

//银行转账系统
//转账分类:网上转账、柜台转账、ATM转账
//转账用户类型:普通用户、银卡用户、金卡用户

abstract class User {
    //通过聚合的方式建立关联
    private TransferAccount transferAccount;

    public User(TransferAccount transferAccount) {
        this.transferAccount = transferAccount;
    }

    protected void transfer() {
        this.transferAccount.transfer();
    }

    abstract void accountType();
}

class NormalUser extends User {

    public NormalUser(TransferAccount transferAccount) {
        super(transferAccount);
    }

    @Override
    void accountType() {
        System.out.println("普通用户");
    }

    //遵守里氏替换原则
    @Override
    protected void transfer() {
        super.transfer();
        System.out.println("普通用户");
    }
}

class SilverUser extends User {

    public SilverUser(TransferAccount transferAccount) {
        super(transferAccount);
    }

    @Override
    void accountType() {
        System.out.println("银卡用户");
    }

    @Override
    protected void transfer() {
        super.transfer();
        System.out.println("银卡用户");
    }
}

class GoldUser extends User {

    @Override
    void accountType() {
        System.out.println("金卡用户");
    }

    public GoldUser(TransferAccount transferAccount) {
        super(transferAccount);
    }

    @Override
    protected void transfer() {
        super.transfer();
        System.out.println("金卡用户");
    }
}

interface TransferAccount {
    void transfer();
}

class OnlineTransfer implements TransferAccount {

    @Override
    public void transfer() {
        System.out.println("网上转账");
    }
}

class CounterTransfer implements TransferAccount {

    @Override
    public void transfer() {
        System.out.println("柜台转账");
    }
}

class ATMTransfer implements TransferAccount {

    @Override
    public void transfer() {
        System.out.println("ATM转账");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值