日期:2014-05-18  浏览次数:20955 次

抽象工厂模式有点疑问?
比如总工厂类: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(); //这里干嘛不直接new新建一个AbstractFactory类,偏偏从子类来新建?是不是抽象类不能直接新建对象?
 
  //创造用户
  AbstractUser user = factory.CreateUser();
  user.CreateUser();
 
  //创造书籍
  AbstractBook book = factory.CreateBook();
  book.CreateBook();
  }
  }
 }

 


------解决方案--------------------
是的,抽象类不能直接新建对象
------解决方案--------------------
本身不能实例化,用它,考虑的是功能差不多,提高代码重用
------解决方案--------------------
AbstractFactory 不能new的,你可以想象new一个AbstractFactory,他怎么知道你到底要哪个实现类