`

1. 创建型模式 (5) 抽象工厂模式

阅读更多
1. 创建型模式 (5) 抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

无论是简单工厂模式,工厂方法模式,还是抽象工厂模式,他们都属于工厂模式,在形式和特点上也是极为相似的,他们的最终目的都是为了解耦。


1. 抽象工厂模式

package com.andrew.pattern0105.abstractFactory.modal01;
public interface Shape {
    void draw();
}

package com.andrew.pattern0105.abstractFactory.modal01;
public interface Color {
    void fill();
}


package com.andrew.pattern0105.abstractFactory.modal01;
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Inside Circle draw method.");
    }
}

package com.andrew.pattern0105.abstractFactory.modal01;
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Inside Rectangle draw method.");
    }
}

package com.andrew.pattern0105.abstractFactory.modal01;
public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Inside Square draw method.");
    }
}

package com.andrew.pattern0105.abstractFactory.modal01;
public class Red implements Color {
    @Override
    public void fill() {
        System.out.println("Inside red fill method.");
    }
}

package com.andrew.pattern0105.abstractFactory.modal01;
public class Green implements Color {
    @Override
    public void fill() {
        System.out.println("Inside green fill method.");
    }
}

package com.andrew.pattern0105.abstractFactory.modal01;
public class Blue implements Color {
    @Override
    public void fill() {
        System.out.println("Inside blue fill method.");
    }
}


package com.andrew.pattern0105.abstractFactory.modal01;
public abstract class AbstractFactory {
    public abstract Color getColor(String color);
    public abstract Shape getShape(String shape);
}

package com.andrew.pattern0105.abstractFactory.modal01;
public class ShapeFactory extends AbstractFactory {
    @Override
    public Color getColor(String color) {
        return null;
    }
    @Override
    public Shape getShape(String shapeType) {
        if (null == shapeType) {
            return null;
        }
        if (shapeType.equalsIgnoreCase("CIRCLE")) {
            return new Circle();
        } else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
            return new Rectangle();
        } else if (shapeType.equalsIgnoreCase("SQUARE")) {
            return new Square();
        }
        return null;
    }
}

package com.andrew.pattern0105.abstractFactory.modal01;
public class ColorFactory extends AbstractFactory {
    @Override
    public Color getColor(String color) {
        if (null == color) {
            return null;
        }
        if (color.equalsIgnoreCase("RED")) {
            return new Red();
        } else if (color.equalsIgnoreCase("GREEN")) {
            return new Green();
        } else if (color.equalsIgnoreCase("BLUE")) {
            return new Blue();
        }
        return null;
    }
    @Override
    public Shape getShape(String shapeType) {
        return null;
    }
}


package com.andrew.pattern0105.abstractFactory.modal01;
public class FactoryProducer {
    public static AbstractFactory getFactory(String choice) {
        if (choice.equalsIgnoreCase("SHAPE")) {
            return new ShapeFactory();
        } else if (choice.equalsIgnoreCase("COLOR")) {
            return new ColorFactory();
        }
        return null;
    }
}


package com.andrew.pattern0105.abstractFactory.modal01;
/**
 * 1. 基础抽象工厂模式
 * 
 * @author andrew
 * @date 2018/07/15
 */
public class AbstractFactoryClient {
    public static void main(String[] args) {
        AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");
        Shape shape1 = shapeFactory.getShape("CIRCLE");
        shape1.draw();
        Shape shape2 = shapeFactory.getShape("RECTANGLE");
        shape2.draw();
        Shape shape3 = shapeFactory.getShape("SQUARE");
        shape3.draw();
        AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");
        Color color1 = colorFactory.getColor("RED");
        color1.fill();
        Color color2 = colorFactory.getColor("Green");
        color2.fill();
        Color color3 = colorFactory.getColor("BLUE");
        color3.fill();
    }
}
运行结果:
Inside Circle draw method.
Inside Rectangle draw method.
Inside Square draw method.
Inside red fill method.
Inside green fill method.
Inside blue fill method.
分享到:
评论

相关推荐

    工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式

    工厂模式是一种常用的软件设计模式,它是创建型设计模式的一种,主要解决对象的创建问题,将对象的创建过程封装起来,使得创建过程独立于使用过程。这样可以提高代码的可复用性和灵活性,同时降低了系统的耦合度。...

    3.java设计模式-创建者模式-抽象工厂模式.pdf

    抽象工厂模式是创建型设计模式中的一种,用于创建一系列相关或相互依赖的对象,而无需指定其具体类。抽象工厂模式强调产品的系列,对于有多个产品等级结构的系统非常有用。在抽象工厂模式中,一个工厂负责创建多个...

    设计模式-抽象工厂模式(讲解及其实现代码)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许系统独立于如何创建、组合和表示产品对象的细节进行设计,为产品族(一组相关或相互依赖的对象)提供...

    创建型模式之抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式是设计模式中的一种创建型模式,其主要目的是为了解耦客户端代码与具体产品的实现。在软件工程中,当系统需要根据不同的平台、环境或者配置产生一系列相关对象,而这些对象之间的关系又非常复杂时,抽象...

    设计模式 - 抽象工厂模式

    抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关或相互依赖的对象,而不需要指定具体的类。该模式允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际产出的具体产品是什么。 在...

    工厂方法模式和抽象工厂模式的区别

    工厂方法模式和抽象工厂模式是两种常见的设计模式,它们都属于创建型模式,用于解决对象的创建问题。在软件设计中,这两种模式都是用来隔离对象的创建和使用,以提高系统的灵活性和可扩展性。 首先,工厂方法模式的...

    设计模式--抽象工厂模式实现多数据库连接

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建对象族的接口,而无需指定它们的具体类。在.NET开发中,这种模式常用于实现多数据库连接,比如连接到MySQL、SQL Server或Oracle等不同的数据库系统。...

    抽象工厂模式 设计模式中创建型之抽象工厂模式

    抽象工厂模式是软件设计模式中的一种创建型模式,它的主要思想是提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。在实际应用中,它常用于跨平台开发,或者当系统需要根据不同的条件创建...

    3.设计模式-抽象工厂模式1

    抽象工厂模式是一种设计模式,属于创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在Java编程中,这种模式可以帮助我们隔离具体类和抽象类之间的耦合,使得系统对扩展友好,...

    工厂方法模式和抽象工厂模式

    在软件设计模式中,工厂方法模式(Factory Method Pattern)和抽象工厂模式(Abstract Factory Pattern)是两种常用的创建型设计模式,它们都属于“工厂”家族,但有着不同的应用场景和目标。 工厂方法模式的核心...

    走进设计模式之抽象工厂(Abstract Factory)

    6. **与其他设计模式的比较**:可能会对比抽象工厂模式与单例模式、工厂方法模式等其他创建型模式,解释它们之间的区别和适用场合。 总之,"走进设计模式之抽象工厂"这篇博客深入探讨了抽象工厂模式的原理、实现...

    设计模式-抽象工厂模式

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象族的接口,而无需指定其具体的类。这种模式的关键在于“族”,即一系列相关的对象。在抽象工厂模式中,我们创建一个抽象工厂接口,然后为每一种具体...

    [创建型模式] 设计模式之抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这种模式的关键在于抽象工厂,它定义了一组创建对象的接口,允许子类决定实例化哪一个类。...

    抽象工厂模式代码

    抽象工厂模式是软件设计模式中的一种,属于创建型模式,它的主要目的是提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。在实际应用中,当我们需要创建一组具有共同特性的对象,而这些对象分别...

    5. 创建型设计模式小结1

    根据具体实现,工厂模式可以分为简单工厂模式、工厂方法模式和抽象工厂模式。简单工厂模式中,工厂类直接创建并返回具体对象;工厂方法模式则通过工厂接口或抽象类,由子类决定创建哪种类型的对象;抽象工厂模式关注...

    设计模式-抽象工厂模式javademo

    抽象工厂模式是软件设计模式中的一种创建型模式,它提供了一种创建对象族(一组具有相互依赖关系的对象)的方法,而无需指定它们的具体类。在Java编程中,抽象工厂模式通常用于实现跨平台或者跨框架的接口,使得系统...

    java设计模式-抽象工厂模式

    抽象工厂模式是设计模式中的一种,它属于创建型模式,主要解决的是当系统有多个产品族,而每个产品族又有多个具体产品时,如何组织代码的问题。在Java中,抽象工厂模式提供了一种创建对象组的方式,使得这些对象属于...

    NET设计模式之抽象工厂模式[归纳].pdf

    抽象工厂模式是设计模式中的一种,属于创建型模式,它的主要目的是为了解决在软件系统中,面对一系列相互依赖的对象的创建问题。这种模式提供了一个创建一系列相关或相互依赖对象的接口,而不必指定它们的具体类。...

    创建型——工厂模式(抽象工厂)

    综上所述,工厂模式,特别是抽象工厂模式,是软件设计中重要的创建型模式,它在模块化和解耦代码方面起到了关键作用。通过抽象工厂,我们可以创建一系列相关的产品,而不需要直接与具体的实现类打交道,提高了代码的...

    设计模式中抽象工厂模式的一个例子

    抽象工厂模式是设计模式中的一种,属于创建型模式,它提供了一个创建对象的接口,但允许子类决定实例化哪些类。这个模式的关键在于为一组相关或相互依赖的对象提供一个统一的接口,而无需指定他们的具体实现。 抽象...

Global site tag (gtag.js) - Google Analytics