变异的适配器?

13-01-25 9527
namespace Adapter
{
	public class NoteBook
	{
		public void SetPower(IPower power)
		{
			if(power.SupplyPower() > 110)
			{
				throw new Exception("爆炸");
			}
			
			Console.WriteLine("正常使用");
		}
	}
	
	public interface IPower
	{
		UInt32 SupplyPower();
	}
	
	public class Power110V : IPower
	{
		public UInt32 SupplyPower()
		{
			return 110;
		}
	}
	
	public class Power220V : IPower
	{
		public UInt32 SupplyPower()
		{
			return 220;
		}
	}
	
	public class PowerAdapter : IPower
	{
		private IPower _Power;
		
		public PowerAdapter(IPower power)
		{
			_Power = power;
		}
		
		public UInt32 SupplyPower()
		{
			UInt32 v = _Power.SupplyPower();
			if(v != 110)
			{
				v = 110;
			}
			
			return v;
		}
	}
	
	public static class TestClass
	{
		public static void Test()
		{
			NoteBook noteBook = new NoteBook();
			Power110V power110V = new Power110V();
			Power220V power220V = new Power220V();
			
			IPower power = new PowerAdapter(power110V);
			
			noteBook.SetPower(power);
		}
	}
}
<p>

我的疑问就是在PowerAdapter类的private IPower _Power;上

很多教程,这里的IPower应该是一个具体类

比如:

class Power110VAdapter : IPower

{

private Power220V_Power;

}

或者

class Power220VAdapter : IPower

{

private Power110V_Power;

}

但我们日常笔记本上使用的适配器只有一种,能同时适用110V和220V

所以,我这里使用了IPower接口

这样就能同时适配110V和220V

没问题吧

    

kof99
2013-01-25 13:55
适配器通常是把接口A转成接口B,你这个例子可能不太恰当

你这里的场景可能理解错了一个东西,笔记本的电源适配器,适配的功能是把交流电转为直流电,而不是转220V到110V

[该贴被kof99于2013-01-25 13:57修改过]

kof99
2013-01-25 14:03
你这个例子感觉更像包装模式。

使你的对象增强了功能,本来只能接110V 输入,包装后可以110V ,220V通吃

root
2013-01-25 16:53
适配器就是适配器,楼主不如直接把PowerAdapter类改叫Power110VAdapter形容更为贴切。。

从适配器的角度来看,它绑定哪个ipower无所谓,重要的是它将所绑定的ipower提供的Power转化为110V大小的Power输出了.

[该贴被root于2013-01-25 16:58修改过]

猜你喜欢