桥接模式
//桥接模式
//CopyRight(C) CAnca Software Office 2006.
//Created by CAnca.
import java.util.*;
public class BridgeMode{
public static void main(String[] args){
buy buy1 = new concreteBuyA();
buy buy2 = new concreteBuyB();
buy1.Add("apple",10,3F);
buy1.setAgio();
buy1.pay(40F);
buy2.Add("banana",50,4F);
buy2.setAgio();
buy2.pay(123F);
}
}
abstract class buy{
protected Hashtable ht = null;
protected float agio = 1.0F;
public buy(){
ht = new Hashtable();
}
public void Add(String foodName,int count,float money){
ht.put(foodName,count * money);
}
protected float payCount(){
Enumeration ex = ht.keys();
float count = 0.0f;
while(ex.hasMoreElements()){
String keyValue = (String)ex.nextElement();
count += Float.parseFloat(ht.get(keyValue).toString());
}
return count;
}
public abstract void setAgio();
public abstract float pay(float money);
}
class concreteBuyA extends buy{
public void setAgio(){
this.agio = 0.9F;
}
public float pay(float money){
float count = payCount();
if(money >= count * agio){
System.out.println("concreteBuyA:付费成功!");
return money - count * agio;
}else{
System.out.println("concreteBuyA:不够现金!");
return -1.0f;
}
}
}
class concreteBuyB extends buy{
public void setAgio(){
if(this.payCount() > 100)
this.agio = 0.7F;
}
public float pay(float money){
float count = payCount();
if(money >= count * agio){
System.out.println("concreteBuyB:付费成功!");
return money - count * agio;
}else{
System.out.println("concreteBuyB:不够现金!");
return -1.0f;
}
}
}