泡泡

              宠辱不惊-闲看庭前花开花落
                           去留无意-漫观天外云展云舒
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

07)Bridge

Posted on 2007-09-19 13:09  AlanPaoPao  阅读(136)  评论(0)    收藏  举报
    桥接模式的目的是: 将抽象部分与实现部分分离,使它们都可以独立的变化
    实例代码:
class Ticket  //奖券
{
  
private String code;
  
private String dept;
  
private String status;
  
public String Code
  
{
    
get return code; }
    
set { code = value; }
  }

  
public String Dept
  
{
    
get return dept; }
    
set { dept = value; }
  }

  
public String Status
  
{
    
get return status; }
    
set { status = value; }
  }

  
public Ticket(String code, String dept, String status)
  
{
    
this.code = code; this.dept = dept; this.status = status;
  }

}
  
class Award   //奖品
{
  
private String name;
  
private String dept;
  
private String status;
  
public String Name
  
{
    
get return name; }
    
set { name = value; }
  }

  
public String Dept
  
{
    
get return dept; }
    
set { dept = value; }
  }

  
public String Status
  
{
    
get return status; }
    
set { status = value; }
  }

  
public Award(String name, String dept, String status)
  
{
    
this.name = name; this.dept = dept; this.status = status;
  }

}

abstract class TicketObject  //操作
{
  
public abstract void Appr(Int32 count);
  
public abstract void Send();
  
public abstract void Move(String code,String dept);
  
public abstract void NewTicket(String code);
  
public abstract void DelTicket(String code);
  
public abstract void ShowTickets();
}

class TicketsData : TicketObject  //奖券数据操作
{
  
private Hashtable tickets = new Hashtable();
  
public TicketsData()
  
{
    tickets.Add(
"20070701001"new Ticket("20070701001""财务""初始"));
    tickets.Add(
"20070701002"new Ticket("20070701002""财务""初始"));
    tickets.Add(
"20070701003"new Ticket("20070701003""财务""初始"));
    tickets.Add(
"20070701004"new Ticket("20070701004""财务""初始"));
    tickets.Add(
"20070701005"new Ticket("20070701005""财务""初始"));
  }

  
public override void Appr(Int32 count)
  
{
    
int i = count;
    
foreach (Ticket t in tickets.Values)
    
{
      
if (t.Status.Equals("初始"))
      
{
        t.Status 
= "审核";
        count
--;
      }

      
if (count == 0)
      
{
        
break;
      }

    }

    
if (count == 0)
    
{
      Console.WriteLine(
"审核成功{0}张",i.ToString());
    }

  }

  
public override void Send()
  
{
    
foreach (Ticket t in tickets.Values)
    
{
      
if (t.Status.Equals("审核"))
      
{
        t.Status 
= "发放";
        t.Dept 
= "客户";
        Console.WriteLine(
"{0}券发放成功", t.Code);
        
break;
      }

    }

  }

  
public override void Move(String code, String dept)
  
{
    ((Ticket)tickets[code]).Dept 
= dept;
    Console.WriteLine(
"{0}券被移动到{1}", code, dept);
  }

  
public override void NewTicket(String code)
  
{
    tickets.Add(code, 
new Ticket(code, "财务""初始"));
    Console.WriteLine(
"{0}券被添加", code);
  }

  
public override void DelTicket(String code)
  
{
    tickets.Remove(code);
    Console.WriteLine(
"{0}券被删除", code);
  }

  
public override void ShowTickets()
  
{
    
foreach (Ticket t in tickets.Values)
    
{
      Console.WriteLine(
"券号:{0} 位置:{1}  状态:{2}", t.Code,t.Dept,t.Status);
    }

  }

}

class AwardData : TicketObject  //奖品数据操作
{
  
private Hashtable awards = new Hashtable();
  
public AwardData()
  
{
    awards.Add(
"熊猫"new Award("熊猫""发放器""初始"));
    awards.Add(
"小狗"new Award("小狗""发放器""初始"));
    awards.Add(
"小猫"new Award("小猫""发放器""初始"));
    awards.Add(
"青蛙"new Award("青蛙""发放器""初始"));
    awards.Add(
"企鹅"new Award("企鹅""发放器""初始"));
  }

  
public override void Appr(Int32 count)
  
{
    
int i = count;
    
foreach (Award t in awards.Values)
    
{
      
if (t.Status.Equals("初始"))
      
{
        t.Status 
= "就绪";
        count
--;
      }

      
if (count == 0)
      
{
        
break;
      }

    }

    
if (count == 0)
    
{
      Console.WriteLine(
"安放成功{0}个", i.ToString());
    }

  }

  
public override void Send()
  
{
    
foreach (Award t in awards.Values)
    
{
      
if (t.Status.Equals("就绪"))
      
{
        t.Status 
= "发放";
        t.Dept 
= "客户";
        Console.WriteLine(
"奖品:{0}发放成功", t.Name);
        
break;
      }

    }

  }

  
public override void Move(String code, String dept)
  
{
    ((Award)awards[code]).Dept 
= dept;
    Console.WriteLine(
"奖品{0}被移动到{1}", code, dept);
  }

  
public override void NewTicket(String code)
  
{
    awards.Add(code, 
new Award(code, "发放器""初始"));
    Console.WriteLine(
"奖品:{0}被添加", code);
  }

  
public override void DelTicket(String code)
  
{
    awards.Remove(code);
    Console.WriteLine(
"奖品:{0}被删除", code);
  }

  
public override void ShowTickets()
  
{
    
foreach (Award t in awards.Values)
    
{
      Console.WriteLine(
"奖品:{0} 位置:{1}  状态:{2}", t.Name, t.Dept, t.Status);
    }

  }

}

class BridgeBase  //桥接类
{
  
private TicketObject dataObject;
  
protected String operators;
  
public BridgeBase(String operators, TicketObject dataObject)
  
{
    
this.operators = operators;
    
this.dataObject = dataObject;
  }

  
public TicketObject Data
  
{
    
set { dataObject = value; }
    
get return dataObject; }
  }

  
public virtual void Appr(Int32 count)
  
{
    dataObject.Appr(count);
  }

  
public virtual void Send()
  
{
    dataObject.Send();
  }

  
public virtual void Move(String code, String dept)
  
{
    dataObject.Move(code,dept);
  }

  
public virtual void New(String code)
  
{
    dataObject.NewTicket(code);
  }

  
public virtual void Delete(String code)
  
{
    dataObject.DelTicket(code);
  }

  
public virtual void ShowAll()
  
{
    Console.WriteLine(
"操作员: " + operators);
    dataObject.ShowTickets();
  }

}

class Finance : BridgeBase  //财务操作
{
  
public Finance(String name, TicketObject dataObject)
    : 
base(name,dataObject)
  
{
  }

  
public override void ShowAll()
  
{
    Console.WriteLine(
"----------财务----------");
    
base.ShowAll();
    Console.WriteLine(
"------------------------");
  }

}

class Relation : BridgeBase   //发放机器操作
{
  
public Relation(TicketObject dataObject)
    : 
base("RelationMachine",dataObject)
  

  }

  
public override void ShowAll()
  
{
    Console.WriteLine(
"---------发放器---------");
    
base.ShowAll();
    Console.WriteLine(
"------------------------");
  }

}

class MainApp  //测试
{
  
static void Main()
  
{
    BridgeBase finance 
= new Finance("rongrong"new TicketsData());
    finance.Appr(
4);
    finance.Send();
    finance.Send();
    finance.Send();
    finance.New(
"20070701008");
    finance.ShowAll();

    BridgeBase relation 
= new Relation(new AwardData());
    relation.Appr(
4);
    relation.New(
"变形金刚");
    relation.Send();
    relation.Send();
    relation.Send();
    relation.ShowAll();
    Console.Read();
  }

}