工厂模式
2012-05-29 20:41 刘永强 阅读(223) 评论(0) 收藏 举报简单工厂:
比方说各个省份的俱乐部要不同的运动员(篮球,足球,乒乓球运动员),就可以根据一个简单工厂(运动员协会)产生相应的运动员:
我们可以设计一个“运动员”接口,“足球运动员”和“篮球运动员”都实现“运动员”这个接口。而“运动员协会”就是一个简单工厂类,它负责实例化“运动员”。
运动员接口
public interface IAthlete
{
void Run();
void Jump();
}
足球运动员:
public class Footballer:IAthlete
{
public void Run()
{
Console.WriteLine("足球运动员跑");
}
public void Jump()
{
Console.WriteLine("足球运动员跳");
}
}
篮球运动员:
public class Basketballer:IAthlete
{
public void Run()
{
Console.WriteLine("篮球运动员跑");
}
public void Jump()
{
Console.WriteLine("篮球运动员跳");
}
}
工厂:
public class Factory
{
public static IAthlete CreateFootballer()
{
return new Footballer();
}
public static IAthlete CreateBasketballer()
{
return new Basketballer();
}
}
工厂方法:
运动员接口
public interface IAthlete
{
void Run();
void Jump();
}
足球运动员:
public class Footballer:IAthlete
{
public void Run()
{
Console.WriteLine("足球运动员跑");
}
public void Jump()
{
Console.WriteLine("足球运动员跳");
}
}
篮球运动员:
public class Basketballer:IAthlete
{
public void Run()
{
Console.WriteLine("篮球运动员跑");
}
public void Jump()
{
Console.WriteLine("篮球运动员跳");
}
//相当于抽象工厂
public interface IFactory
{
IAthlete CreateAthlete();
}
//篮球工厂
public class basketFactory:IFactory
{
public IAthlete CreateAthlete()
{
return new Basketballer();
}
}
//足球工厂
public class FootFactory:IFactory
{
public IAthlete CreateAthlete()
{
return new Footballer();
}
}
抽象工厂:
抽象工厂类public abstract class AbstractFactory
{
public static AbstractFactory CreateFactory(string name)
{
switch (name)
{
case "Nokia":
return new NokiaFactory();
break;
case "Apple":
return new AppleFactory();
break;
default:
return null;
}
}
//两个厂家都有3G和CDMA手机
public abstract I3G Create3G();
public abstract ICDMA CreateCDMA();
}
//定义3G手机接口
public interface I3G
{
void F3G();
}
//定义CDMA接口
public interface ICDMA
{
void FCDMA();
}
诺基亚实现类
public class Nokia3G:I3G
{
public void F3G()
{
HttpContext.Current.Response.Write(string.Format("{0}",this.GetType().Name));
}
}
public class NokiaCDMA:ICDMA
{
public void FCDMA()
{
HttpContext.Current.Response.Write(string.Format("{0}",this.GetType().Name));
}
}
苹果的实现类:
public class Apple3G:I3G
{
public void F3G()
{
HttpContext.Current.Response.Write(string.Format("{0}", this.GetType().Name));
}
}
public class AppleCDMA:ICDMA
{
public void FCDMA()
{
HttpContext.Current.Response.Write(string.Format("{0}", this.GetType().Name));
}
}
诺基亚工厂
public class NokiaFactory:AbstractFactory
{
public override I3G Create3G()
{
return new Nokia3G();
}
public override ICDMA CreateCDMA()
{
return new NokiaCDMA();
}
}
苹果工厂:
public class AppleFactory:AbstractFactory
{
public override I3G Create3G()
{
return new Apple3G();
}
public override ICDMA CreateCDMA()
{
return new AppleCDMA();
}
}
浙公网安备 33010602011771号