【Java】抽象工厂模式

模式思想

  1. 约定不同实体类的行为接口
  2. 定义实现接口的实体类
  3. 定义抽象工厂类用于获取具体工厂生产类
  4. 定义继承自抽象工厂类的具体工厂类
  5. 定义一个工厂创造器/生成器类用来获取具体工厂
  6. 调用创造器/生成器类用于生产

代码实现

  1. 约定接口
  • Color.java
package abstractfactory;

public interface Color {

    void fill();
}
  • Shape.java
package abstractfactory;

public interface Shape {

    void draw();
}
  1. 定义实体类
  • ColorGreen.java
package abstractfactory;

public class ColorGreen implements Color {

    public void fill() {
        System.out.println("Inside ColorGreen::fill() method.");
    }
}
  • ColorBlue.java
package abstractfactory;

public class ColorBlue implements Color {

    public void fill() {
        System.out.println("Inside ColorBlue::fill() method.");
    }
}
  • ShapeCircle.java
package abstractfactory;

public class ShapeCircle implements Shape {

    public void draw() {
        System.out.println("Inside ShapeCircle::draw() method.");
    }
}
  • ShapeRectangle.java
package abstractfactory;

public class ShapeRectangle implements Shape {

    public void draw() {
        System.out.println("Inside ShapeRectangle::draw() method.");
    }
}
  1. 定义抽象工厂类
package abstractfactory;

public abstract class AbstractFactory {

    public abstract Shape getShape(String shape);

    public abstract Color getColor(String color);
}
  1. 定义具体工厂类
  • FactoryColor.java
package abstractfactory;

public class FactoryColor extends AbstractFactory {

    public Color getColor(String colorType) {
        if (colorType == null) {
            return null;
        }

        if (colorType.equalsIgnoreCase("BLUE")) {
            return new ColorBlue();
        } else if (colorType.equalsIgnoreCase("GREEN")) {
            return new ColorGreen();
        }

        return null;
    }

    public Shape getShape(String shapeType) {
        return null;
    }
}
  • FactoryShape.java
package abstractfactory;

public class FactoryShape extends AbstractFactory {

    public Shape getShape(String shapeType) {
        if (shapeType == null) {
            return null;
        }

        if (shapeType.equalsIgnoreCase("CIRCLE")) {
            return new ShapeCircle();
        } else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
            return new ShapeRectangle();
        }

        return null;
    }

    public Color getColor(String colorType) {
        return null;
    }
}
  1. 定义创造器/生成器类
package abstractfactory;

public class FactoryProducer {

    public static AbstractFactory getFactory(String choice) {
        if (choice.equalsIgnoreCase("COLOR")) {
            return new FactoryColor();
        } else if (choice.equalsIgnoreCase("SHAPE")) {
            return new FactoryShape();
        }

        return null;
    }
}
  1. 调用创造器/生成器类用于生产
import abstractfactory.AbstractFactory;
import abstractfactory.Color;
import abstractfactory.FactoryProducer;
import abstractfactory.Shape;

public class AbstractFactoryDemo {

    public static void main(String[] args) {
        AbstractFactory factoryShape = FactoryProducer.getFactory("shape");
        if (factoryShape != null) {
            Shape shape = factoryShape.getShape("Circle");
            shape.draw();
        } else {
            System.out.println("unknown factory type.");
        }

        AbstractFactory factoryColor = FactoryProducer.getFactory("color");
        if (factoryColor != null) {
            Color color = factoryColor.getColor("blue");
            color.fill();
        } else {
            System.out.println("unknown factory type.");
        }
    }
}

指导文档

http://www.runoob.com/design-pattern/abstract-factory-pattern.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值