工厂方法和抽象工厂方法的区别:
个人理解为抽象工厂方法是多个工厂方法,具体如下:
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。(借鉴)
如大话设计模式中抽象工厂方法一节中的UML类图如下:
工厂模式:
抽象工厂模式:
对比两UML图易知:抽象工厂方法中有多个抽象产品类,如图中的IDepartment和IUser,且每个工厂可以创建多个具体产品实例,如图二中创建了用户和部门两个实例。