首先我们创建一个接口IPeople
public interface IPeople
{
/// <summary>
/// 衣
/// </summary>
void Clothing();
/// <summary>
/// 食
/// </summary>
void Food();
/// <summary>
/// 住
/// </summary>
void House();
/// <summary>
/// 行
/// </summary>
void Walk();
}
然后,现在有学生(Student)
和工人(Worker)
两个对象分别实现这个接口
public class Student : IPeople
{
public void Clothing()
{
Console.WriteLine("穿校服");
}
public void Food()
{
Console.WriteLine("吃食堂");
}
public void House()
{
Console.WriteLine("住宿舍");
}
public void Walk()
{
Console.WriteLine("步行");
}
}
public class Worker : IPeople
{
public void Clothing()
{
Console.WriteLine("穿工装");
}
public void Food()
{
Console.WriteLine("吃外卖");
}
public void House()
{
Console.WriteLine("住板房");
}
public void Walk()
{
Console.WriteLine("电动车");
}
}
然后我们需要打印他们
static void Main(string[] args)
{
PrintfInfo(new Student()); //此处根据特定的实例化对象就可以打印不用身份的信息
PrintfInfo(new Worker());
Console.Read();
}
public static void PrintfInfo(IPeople people)
{
people.Clothing();
people.Food();
people.House();
people.Walk();
Console.WriteLine("********分割线*********");
}
接着现在我们有了一个第三方
的类-富豪(RichMan)
,这意味着我们不能修改它。该类如下
public class RichMan
{
public void Yi()
{
Console.WriteLine("穿名牌");
}
public void Shi()
{
Console.WriteLine("吃大餐");
}
public void Zhu()
{
Console.WriteLine("住洋房");
}
public void Xing()
{
Console.WriteLine("开豪车");
}
}
我们的目标是想这个RichMan
类,可以同Student
和Worker
一样使用,我们就需要为他创建一个适配器,适配器很简单,看代码就能理解
方法一、继承
/// <summary>
/// 该适配器同时继承RichMan, IPeople
/// </summary>
public class RichMan_Adapter : RichMan, IPeople
{
public void Clothing()
{
//调用RichMan中对应的方法
base.Yi(); //可简化base
}
public void Food()
{
Shi();
}
public void House()
{
Zhu();
}
public void Walk()
{
Xing();
}
}
方法二、组合
public class RichMan_Adapter : IPeople
{
//组合一个RichMan实例
private readonly RichMan richMan = new RichMan();
public void Clothing()
{
richMan.Yi();
}
public void Food()
{
richMan.Shi();
}
public void House()
{
richMan.Zhu();
}
public void Walk()
{
richMan.Xing();
}
}
我们就可以想Student
一样使用RichMan
了
static void Main(string[] args)
{
PrintfInfo(new Student());
PrintfInfo(new Worker());
PrintfInfo(new RichMan_Adapter());
Console.Read();
}
对比上面两种方法,我们知道方法一、继承比较有侵入性,因为是继承关系,所以我们在使用适配器时能访问到本该不属于他的方法
使用时应当考虑周全