抽象工厂模式有点疑问?
比如总工厂类: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();
最重要的是 你对多态和多态的作用不了解!!
[解决办法]
设计模式都只是一些比较好的设计思想,不能强办硬套的,有的地方用了哪些设计模式反而不怎么好。另外很多设计模式都是通过面向对象的三要素,继承,封装,多态来扩张开来的。要学习设计模式,先弄清楚这三个要素,这样你就会对很多设计模式有一个全新的了解,也便于学习。