标签:
一、定义
前面讲到的工厂方法。每个工厂对应着一类产品。抽象工厂就是工厂方法中不再是针对一种产品,而是多个不同类型的产品。
工厂方法和抽象方法的区别—手工的图,字有点丑。
二、实例
服务类型接口:也可以比作"系列A",具体的产品:WCF、BL
public interface IService { } public class WCF : IService { public WCF() { Console.WriteLine("WCF服务."); } } public class BL : IService { public BL() { Console.WriteLine("BL服务."); } }
推送服务接口:也可比作"系列B":有QQ和Email产品
public interface IPush { } public class QQ : IPush { public QQ() { Console.WriteLine("QQ推送服务."); } } public class Email : IPush { public Email() { Console.WriteLine("Email推送服务."); } }
工厂接口:创建两种系列的产品:系列A和系列B
public abstract class FactoryBuilder { public abstract IService CreatService(); public abstract IPush CreatPush(); }
工厂A:创建WCF服务和QQ推送
public class WCF_QQPushFactory : FactoryBuilder { public override IService CreatService() { return new WCF(); } public override IPush CreatPush() { return new QQ(); } }
工厂B:创建BL服务和Email推送
public class BL_EmailFactory : FactoryBuilder { public override IService CreatService() { return new BL(); } public override IPush CreatPush() { return new Email(); } }
客户端调用:
//抽象工厂 Factory3.FactoryBuilder fb3 = new Factory3.WCF_QQPushFactory(); fb3.CreatService(); fb3.CreatPush();
三、优缺点
优:每个工厂可以创建不同系列 的不同产品。依然将实例化推迟到了子类。
缺:如果某个系列要增加产品或者增加一种系列,那~~添加、修改的地方比较多。
设计模式要辩证使用,合适的才是最好的。
标签:
原文地址:http://www.cnblogs.com/sunchong/p/5103370.html