桥接模式的目的是: 将抽象部分与实现部分分离,使它们都可以独立的变化。
实例代码:
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();
}
}
实例代码:
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();
}
}


浙公网安备 33010602011771号