理解了工厂方法模式后,再来看抽象工厂模式,就变得很容易了,这里是关于工厂方法的上篇随笔,请戳:简单工厂和工厂方法模式
工厂方法模式中一个工厂只能生产一个产品,当要让一个工厂生产多个产品的时候,工厂方法模式就不怎么适用了,而抽象工厂是工厂方法的进一步抽象,抽象工厂就补足了工厂方法的短处,他们之间的角色是相同,只是抽象工厂在工厂方法基础上增加了为创建一组相关或相互依赖的产品对象的接口。
抽象工厂的角色跟工厂方法的相同
- 抽象工厂
- 具体工厂
- 抽象产品
- 具体产品
抽象工厂
package com.songpu.dp.abstractfactory;
public interface Factory {
}
具体工厂
package com.songpu.dp.abstractfactory;
public class FoodFactory implements Factory {
public Product createBread() {
return new Bread();
}
package com.songpu.dp.abstractfactory;
public class ToyFactory implements Factory {
public Product createMuppet() {
return new Muppet();
}
public Product createBlock(){
return new Block();
}
}
抽象产品
package com.songpu.dp.abstractfactory;
public interface Product {
}
package com.songpu.dp.abstractfactory;
public interface Food extends Product {
}
package com.songpu.dp.abstractfactory;
public interface Toy extends Product {
}
具体产品
package com.songpu.dp.abstractfactory;
public class Block implements Toy {
Block(){
System.out.println("Block被生产");
}
}
package com.songpu.dp.abstractfactory;
public class Muppet implements Toy {
Muppet() {
System.out.println("Muppet被生产");
}
}
package com.songpu.dp.abstractfactory;
public class Bread implements Food {
Bread(){
System.out.println("Bread被生产");
}
}
package com.songpu.dp.abstractfactory;
public class Cake implements Food {
Cake() {
System.out.println("Cake被生产");
}
}
最后看一下执行结果
Bread被生产
Cake被生产
Block被生产
Muppet被生产