首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

抽象工厂模式有些疑问

2013-12-15 
抽象工厂模式有点疑问?比如总工厂类:using Systemusing System.Collections.Genericusing System.Textn

抽象工厂模式有点疑问?
比如总工厂类:using System;
  using System.Collections.Generic;
  using System.Text;
  
namespace AbstractFactoryMode
  {
   /// <summary>
   /// 总工厂
   /// </summary>
   public abstract class AbstractFactory
   {
   public abstract AbstractUser CreateUser();
   public abstract AbstractBook CreateBook();
   }
  }

  子工厂类:
using System;
  using System.Collections.Generic;
  using System.Text;
  
namespace AbstractFactoryMode
  {
   /// <summary>
   /// 一个具体的工厂
   /// </summary>
   public class ConcreteFactory : AbstractFactory
   {
   /// <summary>
   /// 子工厂,用来创造用户
   /// </summary>
   /// <returns></returns>
   public override AbstractUser CreateUser()
   {
   //具体的产物
   return new User();
   }
   /// <summary>
   /// 子工厂,用来创造书籍
   /// </summary>
   /// <returns></returns>
   public override AbstractBook CreateBook()
   {
   //具体的产物
   return new Book() ;
   }
   }
  }
.........................................
最后调用



using System;
  using System.Collections.Generic;
  using System.Text;
  
namespace AbstractFactoryMode{
   class Program
   {
   static void Main(string[] args)
   {
   //得到一个子工厂
   AbstractFactory factory = new ConcreteFactory(); //这里干嘛不 ConcreteFactory factory = new ConcreteFactory(),这样也可以吧,这样感觉抽象工厂AbstractFactor没用了?
//创造用户
   AbstractUser user = factory.CreateUser();
   user.CreateUser();
  
  //创造书籍
   AbstractBook book = factory.CreateBook();
   book.CreateBook();
   }
   }
  }

  
[解决办法]
1.首先记住设计模式啊 编写代码的一条最重要的原则:
如果需要修改代码 让要修改的数量最少
也就是设计原则之一:对扩展说yes 对修改说no

2.你这样问,说明你对多态和多态的作用不了解
现在假设使用一个新的工厂类NewFactory继承AbstractFactory 那么要修改下面的代码
那个修改要少一些??

ConcreteFactory factory = new ConcreteFactory();
AbstractFactory factory = new ConcreteFactory();

最重要的是 你对多态和多态的作用不了解!!
[解决办法]
设计模式都只是一些比较好的设计思想,不能强办硬套的,有的地方用了哪些设计模式反而不怎么好。另外很多设计模式都是通过面向对象的三要素,继承,封装,多态来扩张开来的。要学习设计模式,先弄清楚这三个要素,这样你就会对很多设计模式有一个全新的了解,也便于学习。

热点排行