姓名:赵汉青
学号:07770201
模式名称:适配器模式
1.问题描述
生活场景:日常生活中,我们所使用的电器,比如:手机,笔记本电脑,剃须刀等在充电时所需要的电压,均不是我国提供的统一民用电压“220v”,而我们又只能使用已经存在的电压给电器充电,这时,就需要一个电源适配,把220V的电压转化为电器所需的电压值。
设计目标:实现对不能满足新化境的“已存对象”的转化,使“已存对象”满足新的环境。
2.不假思索的思路:提供符合电器规格的电压以适应电器的要求。
设计类图:
代码:
public class Power //普通电压类 Note:在“不假思索的思路”中,没用到此类
{
public void GetPower220()
{
Console.WriteLine("普通的220v的电压");
}
}
public class PowerOfComputer //计算机所需的电压类
{
public void GetComputerPower()
{
Console.WriteLine("计算机所需的电压");
}
}
static void Main(string[] args) //相当于计算机 public class Computer
{
Console.WriteLine("计算机:");
PowerOfComputer poc = new PowerOfComputer();
poc.GetComputerPower();
}
缺点:每次都建立新的电压类,提供不同电器所需的电压值,这样不仅麻烦,而且已有的提供电压值的功能没能使用上,是一种浪费。
3.归纳阶段:
通过适配器的方式来进行处理:位电器建立从220v到该电电器所需电压值的转化类,以实现对已存在的电压的利用。
结构类图:
代码:
public interface ITarget //适配器接口
{
void GetPower();
}
public class Power //普通电压类
{
public void GetPower220()
{
Console.WriteLine("普通的220v的电压");
}
}
public class Adapter : ITarget //适配器
{
Power power;
public Adapter(Power p)
{
this.power = p;
}
public void GetPower()
{
power.GetPower220();
Console.WriteLine("把得到的普通电压转化为计算机所需的电压");
}
}
static void Main(string[] args) //相当于计算机 public class Computer
{
Console.WriteLine("计算机:");
Power power = new Power();
ITarget iTarget = new Adapter(power);
iTarget.GetPower();
}
设计体会:
Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”。
4.验证阶段
增加一种需要新的电压的电器:新的电器通过同样的方式来使用已存在的电压。
类结构图:
代码:
public interface ITargetOfComputer //计算机适配器接口
{
void GetPower();
}
public interface ITargetOfCellphone //手机适配器接口
{
void GetPower();
}
public class Power //普通电压类
{
public void GetPower220()
{
Console.WriteLine("普通的220v的电压");
}
}
public class ComputerAdapter : ITargetOfComputer //计算机电压适配器
{
Power power;
public ComputerAdapter(Power p)
{
this.power = p;
}
public void GetPower()
{
power.GetPower220();
Console.WriteLine("把得到的普通电压转化为计算机所需的电压");
}
}
public class CellPhoneAdapter : ITargetOfCellphone //手机电压适配器
{
Power power;
public CellPhoneAdapter(Power p)
{
this.power = p;
}
public void GetPower()
{
power.GetPower220();
Console.WriteLine("把得到的普通电压转化为手机所需的电压");
}
}
public class Computer //计算机类
{
public void GetSuitPowerByAdapter(Power power) //通过计算机适配器使用普通电压
{
Console.WriteLine("计算机:");
ComputerAdapter ca = new ComputerAdapter(power);
ITargetOfComputer iTarget = ca;
iTarget.GetPower();
}
}
public class Cellphone //手机类
{
public void GetSuitPowerByAdapter(Power power)//通过手机适配器使用普通电压
{
Console.WriteLine("手机:");
CellPhoneAdapter ca = new CellPhoneAdapter(power);
ITargetOfCellphone iTarget = ca;
iTarget.GetPower();
}
}
static void Main(string[] args)
{
Power power = new Power(); //普通的电源
Computer computer = new Computer();
computer.GetSuitPowerByAdapter(power);
Console.WriteLine("==========================================");
Cellphone cellphone = new Cellphone();
cellphone.GetSuitPowerByAdapter(power);
}
5.抽象描述
思路描述:
通过一个中间媒介使两个因环境不匹配而不能相关联但又有逻辑联系的部分相关联。
类结构图: