head first 设计模式学习随笔(4)----抽象工厂模式

抽象工厂模式:

提供一个接口,用于创建相关的依赖对象的家族,而不需要明确指定类

该模式符合依赖倒转原则,高级对象不依赖于低级对象,两者都依赖于抽象。

我个人认为就是高级对象抽象成高级接口,低级对象抽象成低级接口,2者的依赖关系转化为2种接口的之间的依赖,而非对象之间的依赖关系,从而达到松耦合的效果。

抽象工厂强调的就是封装,将需要不同的对象创建部分放在不同的工厂里面,有选择性的返回不同的对象,以下我以造车工厂--汽车为例: 

  1      public   interface  IShowProduct
  2      {
  3        void ShowProduct();
  4    }

  5
  6      public   interface  IAbstractFactory
  7      {
  8        IFactory CreateFactory(string name);
  9    }

 10
 11      public   interface  IFactory :IShowProduct
 12      {
 13        ICar CreateCar(string name);
 14        
 15    }

 16
 17      public   interface  ICar : IShowProduct
 18      {
 19
 20    }

 21
 22      public   class  AbstractFactory : IAbstractFactory
 23      {
 24        IAbstractFactory Members
 36    }

 37
 38
 39      public   class  Factory_1 : IFactory
 40      {
 41
 42        IFactory Members
 54
 55        IShowProduct Members
 63    }

 64
 65      public   class  Factory_2 : IFactory
 66      {
 67
 68        IFactory Members
 80
 81        IShowProduct Members
 89    }

 90
 91      public   class  BMW : ICar
 92      {
 93
 94        IShowProduct Members
102    }

103
104      public   class  QQ : ICar
105      {
106
107        IShowProduct Members
115    }

116
117      public   class  Hyc : ICar
118      {
119
120        IShowProduct Members
128    }

129
130      public   class  Hgpc : ICar
131      {
132
133        IShowProduct Members
141    }

142
143      public   class  Mc : ICar
144      {
145
146        IShowProduct Members
154    }

155
156      class  Program
157      {
158        static void Main(string[] args)
159        {
160            string carName = "大奔驰";
161            string factoryName = "工厂1";
162            Console.WriteLine(string.Format("我选择了{0},要制造{1}", factoryName, carName));
163            IAbstractFactory abstractfactory = new AbstractFactory();
164            IFactory factory = abstractfactory.CreateFactory(factoryName);
165            factory.ShowProduct();
166            ICar car = factory.CreateCar(carName);
167            car.ShowProduct();
168
169            carName = "QQ";
170            factoryName = "工厂1";
171            Console.WriteLine(string.Format("我选择了{0},要制造{1}", factoryName, carName));
172
173            IFactory factory_2 = abstractfactory.CreateFactory(factoryName);
174            factory_2.ShowProduct();
175            car = factory_2.CreateCar(carName);
176            car.ShowProduct();
177
178            Console.Read();
179        }

180    }
 

head first 设计模式学习随笔(4)----抽象工厂模式

你可能感兴趣的:(抽象工厂模式)