桥接模式有效的避免了类爆炸,减少子类数量,利于扩展,在使用时需要明确系统中独立变化的两个维度,这也是使用桥接模式的前提条件。
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 ( ) ;
}
}
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转账" ) ;
}
}