下图为所有设计模式,带标记为重点掌握以及工作中常用到的:
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式,其具体步骤如下:
①将多个工厂类抽象出一个抽象类
②每个工厂类继承该抽象类
③创建一个工厂创造器/生成器类,通过传入类型去获取对应工厂方法,再通过获取出的工厂类获取实列对象。
抽象工厂模式对应类图如下:
抽象工厂代码实现
1.创建2个接口,一个形状接口和一个颜色接口
// 形状接口
public interface Shape {
void drwa();
}
// 颜色接口
public interface Color {
void fill();
}
2.分别创建2个接口的各自实现类
创建3个颜色的实现类:
public class Red implements Color {
@Override
public void fill() {
System.out.println("===============这是红色=============");
}
}
public class Blue implements Color {
@Override
public void fill() {
System.out.println("===============这是蓝色=============");
}
}
public class Green implements Color {
@Override
public void fill() {
System.out.println("===============这是绿色=============");
}
}
创建3个形状的实现类:
public class Circle implements Shape {
@Override
public void drwa() {
System.out.println("===============这是圆形=============");
}
}
public class Rectangle implements Shape {
@Override
public void drwa() {
System.out.println("===============这是长方形=============");
}
}
public class Square implements Shape {
@Override
public void drwa() {
System.out.println("===============这是正方形=============");
}
}
3.为 Color 和 Shape 对象创建抽象类来获取工厂
public abstract class AbstractFactory {
public abstract Shape getShape(String shape);
public abstract Color getColor(String color);
}
4.创建颜色工厂类并继承抽象工厂类
public class ColorFactory extends AbstractFactory {
@Override
public Shape getShape(String shape) {
return null;
}
@Override
public Color getColor(String color) {
Color result = null;
if ("red".equals(color)) {
result = new Red();
} else if ("green".equals(color)) {
result = new Green();
} else if ("blue".equals(color)) {
result = new Blue();
}
return result;
}
}
5.创建形状工厂类并继承抽象工厂类
public class ShapeFactory extends AbstractFactory {
@Override
public Shape getShape(String shape) {
Shape result = null;
if ("circle".equals(shape)) {
result = new Circle();
} else if ("rectangle".equals(shape)) {
result = new Rectangle();
} else if ("square".equals(shape)) {
result = new Square();
}
return result;
}
@Override
public Color getColor(String color) {
return null;
}
}
6.创建工厂创造器/生成器类,通过传递形状或颜色信息来获取工厂
public class FactoryProducer {
public static AbstractFactory getFactory(String type) {
AbstractFactory result = null;
if ("shape".equals(type)) {
result = new ShapeFactory();
} else if ("color".equals(type)) {
result = new ColorFactory();
}
return result;
}
}
7.测试抽象工厂模式
public static void main(String[] args) {
AbstractFactory factory = FactoryProducer.getFactory("color");
Color red = factory.getColor("red");
red.fill();
AbstractFactory shape = FactoryProducer.getFactory("shape");
Shape circle = shape.getShape("circle");
circle.drwa();
}
测试结果如下:
Connected to the target VM, address: ‘127.0.0.1:50614’, transport: ‘socket’
===这是红色=
===这是圆形=
Disconnected from the target VM, address: ‘127.0.0.1:50614’, transport: ‘socket’
小结
抽象工厂模式说实话我感觉理解起来还是很有难度的,即使现在理解了但是在项目中是否可以正常的使用出来也还是一个未知数,可能是自身代码量不够,还需要多多努力学习才可以!