Java抽象工厂模式

存在Shape,Color两个工厂
这两个工厂又继承抽象类AbstractFactory。
自上而下

先创建顶层抽象工厂:AbstractFactory.java,有两个抽象方法,传一个String参数,返回Shap/Color对象

public abstract class AbstractFactory {
    abstract Shape getShape(String shape);
    abstract Color getColor(String color);

}

然后创建ShapeFactory.java和ColorFactory.java,继承AbstractFactory.java。根据不同的传参返回不同的Shape/Color。

public class ShapeFactory extends AbstractFactory {
    @Override
    Shape getShape(String shape) {
        switch (shape){
            case "Circle":{
                return new Circle();
            }
            case "Square":{
                return new Square();
            }

        }

        return null;
    }

    @Override
    Color getColor(String color) {
        return null;
    }
}



public class ColorFactoyr extends AbstractFactory {

    @Override
    Shape getShape(String shape) {
        return null;
    }

    @Override
    Color getColor(String color) {
        switch (color){
            case "Red":{
                return new Red();
            }

            case "Green":{
                return new Green();
            }
        }
        return null;
    }
}

创建两个接口Shape.java和Color.java,给Shape接口一个draw()方法,给Color接口一个fill()方法

public interface Shape {
    void draw();
}

public interface Color {
    void fill();
}

创建Shape和Color的实现类

public class Square implements Shape {

    @Override
    public void draw() {
        System.out.println("drawing square...");
    }
}
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("drawing circle....");
    }
}

-------------------------------------------------------------------
public class Green implements Color{

    @Override
    public void fill() {
        System.out.println("filling green...");
    }
}

public class Red implements Color{

    @Override
    public void fill() {
        System.out.println("filling red...");
    }
}

这样就完成了抽象工厂模式,就是有一个抽象类用来生成工厂类,最后写一个测试方法验证下

public class AbstractFactoryTest {
    public static void main(String[] args) {

        AbstractFactory shapeFactory = new ShapeFactory();
        Shape shape = shapeFactory.getShape("Circle");
        shape.draw();

        AbstractFactory colorFactory = new ColorFactoyr();
        Color color = colorFactory.getColor("Red");
        color.fill();


        }
    }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 每一个模式都是针对一定问题的解决方案。抽象工厂模式与工厂方法模式的最大区别就在于,工厂方法模式针对的是一个产...
    今晚打肉山阅读 661评论 0 4
  • 转:http://www.runoob.com/design-pattern/abstract-factory-p...
    right_33cb阅读 205评论 0 0
  • 一、介绍 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。主要解决:主要解决接口选择的问...
    聂叼叼阅读 166评论 0 1
  • 这篇我们将介绍最后一种工厂模式,抽象工厂模式 0.抛出问题 很多博客和书都喜欢用很生活化的例子来实现设计模式的代码...
    ironman327阅读 894评论 0 2
  • 概念 围绕一个超级工厂创建其他工厂。此超级工厂又称为其他工厂的工厂。属于创建型模式。 使用场景 QQ换肤(一整套一...
    意大利大炮阅读 201评论 0 0