②抽象工厂模式(Abstract Factory Pattern)
简介:
抽象工厂模式是围绕一个超级工厂创建其他工厂,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
实现方法:
- 创建产品接口,产品实现类实现接口。
- 创建抽象工厂,普通工厂类继承抽象工厂,重写方法,扩展生产产品的方法。
- 创建超级工厂,用来生产普通工厂类。
- 通过不同的条件,使超级工厂生成相应的普通工厂类,进而生成产品对象。
优点:
当一个产品族中的多个对象被设计成一起工作时,抽象工厂模式可以保证客户端始终只使用同一个产品族中的对象。
缺点:
产品族扩展非常困难,要增加一个系列的产品,既要在抽象的工厂方增加代码,又要在具体的产品和工厂类方增加代码。
使用场景:
当系统中需要多个产品族,而系统只消费其中某一族的产品时,抽象工厂模式可以很好的应用。
特点:
产品族难扩展,产品等级易扩展。
图形实现:
代码实现:
Color.java:
//创建Color接口
public interface Color {
//定义show()方法
void show();
}
Red.java:
public class Red implements Color{
@Override
public void show() {
System.out.println("表现红色!");
}
}
Green.java:
public class Green implements Color{
@Override
public void show() {
System.out.println("表现绿色!");
}
}
Yellow.java:
public class Yellow implements Color{
@Override
public void show() {
System.out.println("表现黄色!");
}
}
AbstractFactory.java:
public abstract class AbstractFactory {
public abstract Color getColor(String color);
}
ColorFactory.java:
public class ColorFactory {
//定义getColor()方法,方法完成实例的创建
public Color getColor(String colorType) {
if (colorType == null) {
return null;
}
if (colorType.equalsIgnoreCase("RED")) {
return new Red();
} else if (colorType.equalsIgnoreCase("GREEN")) {
return new Green();
} else if (colorType.equalsIgnoreCase("YELLOW")) {
return new Yellow();
}
return null;
}
}
FactoryProducer.java:
public class FactoryProducer {
public static AbstractFactory getFactory(String choice){
if(choice.equalsIgnoreCase("COLOR")){
return new ColorFactory();
}
return null;
}
}
FactoryPatternDemo.java:
public class AbstractFactoryPatternDemo {
public static void main(String[] args) {
//通过超级工厂创建普通工厂类
AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");
//通过调用工厂类方法创建红色对象
Color color1 = colorFactory.getColor("RED");
color1.show();//输出表现红色!
//通过调用工厂类方法创建红色对象
Color color2 = colorFactory.getColor("GREEN");
color2.show();//输出表现绿色!
//通过调用工厂类方法创建红色对象
Color color3 = colorFactory.getColor("YELLOW");
color3.show();//输出表现黄色!
}
}
主线程main()执行结果:
表现红色!
表现绿色!
表现黄色!