在設計模式的學習過程中,委托是一個不容易理解的知識點。尤其是在學完代理模式之後,就更不知道什麼是什麼了。下面分別看一下各自的實例,來看一下這兩者有什麼區別。
委托是一種引用方法的類型。一旦為委托分配了方法,委托將於該方法具有完全相同的行為。委托的方法的使用可以向其他任何方法一樣,具有參數和返回值。
委托可以是對函數的抽象,即為函數的“類”,委托的實例對象將代表一個具體的函數。
委托的實例:
class Program { static void Main(string[] args) { Teacher Tc = new Teacher("趙老師"); //實例化老師和學生 Student St1 = new Student("張三"); Student St2 = new Student("李四"); //把學生的行為交給 委托 Tc.TeacherCome += new Teacher.EventHandler(St1.StopCopyWork); Tc.TeacherCome += new Teacher.EventHandler(St2.StopWhisper); Tc.Come(); } } class Teacher { private string name; public Teacher(string name) { this.name = name; } public delegate void EventHandler(); //聲明一個委托EventHandler public event EventHandler TeacherCome; //聲明事件名稱,事件類型為EventHandler public void Come() //老師的行為 { Console.WriteLine("{0}來了", name); if (TeacherCome != null) //如果需要委托,則執行下面程序 { TeacherCome(); } } } class Student { private string name; public Student(string name) { this.name = name; } public void StopWhisper() { Console.WriteLine("老師來了,{0}停止說話",name); } public void StopCopyWork() { Console.WriteLine("老師來了,{0}停止抄作業",name); } }
運行結果:
<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+tPrA7cSjyr2jujwvcD4KPHA+ICAgICAgzqrG5Mv7ttTP88zhuanSu9bWtPrA7aOswLSw79b6tO+1vcS/tcShozwvcD4KPHA+tPrA7cSjyr3KtcD9o7o8L3A+CjxwPjwvcD4KPHByZSBjbGFzcz0="brush:java;">class Program
{
static void Main(string[] args)
{
SchoolGirl mm = new SchoolGirl();
mm.Name = "jiaojiao";
Proxy daili = new Proxy(mm);
daili.GiveDolls();
daili.GiveFlowers();
daili.GiveChocolate();
}
}
class SchoolGirl //定義 女孩類
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
interface IGiveGift //創建一個送禮物的接口
{
void GiveDolls();
void GiveFlowers();
void GiveChocolate();
}
class Pursuit:IGiveGift //追求者類,使用送禮物的接口
{
SchoolGirl mm; //要追求女孩的名字
public Pursuit(SchoolGirl mm)
{
this.mm = mm;
}
public void GiveDolls()
{
Console.WriteLine(mm.Name+"送你洋娃娃");
}
public void GiveFlowers()
{
Console.WriteLine(mm.Name + "送你花");
}
public void GiveChocolate()
{
Console.WriteLine(mm.Name + "送你巧克力");
}
}
class Proxy : IGiveGift //定義代理模式,也用送禮物的接口
{
Pursuit gg;
public Proxy(SchoolGirl mm) //區別在於,代替追求者 送禮物
{
gg=new Pursuit(mm);
}
public void GiveDolls()
{
gg.GiveDolls();
}
public void GiveFlowers()
{
gg.GiveFlowers();
}
public void GiveChocolate()
{
gg.GiveChocolate();
}
}
運行結果:
委托與代理的比較
代理:是把一些事情交給某人幫忙去完成。
委托:是當某件事情發生的時候,順便干某件事情。委托就相當於一個觸發器罷了。