美文网首页JavaEE 学习专题程序员技术干货
java设计模式——抽象工厂模式

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

作者: Mr_欢先生 | 来源:发表于2018-03-16 14:54 被阅读100次

1.抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

2.代码实现

场景:现在有要使用一个超级工厂创建两个工厂,一个工厂制造模具,一个工厂制造颜料。

  • 颜料工厂(Color):
public interface Color {
    void fill ();
}
  • 红颜色:
import color.Color;
public class Red implements Color{
    @Override
    public void fill() {
        System.out.println("制造一个红颜色");
    }
}
  • 灰色:
import color.Color;
public class Green implements Color {
    @Override
    public void fill() {
        System.out.println("制造一个灰颜色");
    }
}
  • 模具工厂(Shape):
public interface Shape {
    /**
     * 制造各种形状模型
     */
    void manufacture();
}
  • 圆形:
public class Circular implements Shape {

    @Override
    public void manufacture() {
        System.out.println("我是制造的圆形模具!");
    }
}
  • 矩形:
public class Rectangle implements Shape {
    @Override
    public void manufacture() {
        System.out.println("我是制造的矩形模具");
    }
}

  • 制造颜色工厂(ColorFactory):
import color.Color;

public class ColorFactory implements AbstractFactory{
    Color obj = null;
    @Override
    public Color getClass(Class clazz){
        try {
            obj = (Color) Class.forName(clazz.getName()).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return obj;
    }
    public void fill(){
        this.obj.fill();
    }
}
  • 制造模具工厂(ShapeFactory):
import shape.Shape;
public class ShapeFactory implements AbstractFactory{
    Shape obj = null;
    @Override
    public Shape getClass(Class clazz){
        try {
            obj = (Shape) Class.forName(clazz.getName()).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return obj;
    }
    public void manufacture() {
        this.obj.manufacture();
    }
    
}
  • 制造工厂接口(AbstractFactory):
public interface AbstractFactory {
    <T> T getClass(Class<? extends T> clazz);
}
  • 抽象模式制造物品(FactoryPattern):
import color.Color;
import color.impl.Green;
import color.impl.Red;
import shape.impl.Circular;
import shape.impl.Rectangle;
import shape.Shape;

public class FactoryPattern {

    public static void main(String[] args) {
        AbstractFactory shapeFactory = new ShapeFactory();
        Shape circular = shapeFactory.getClass(Circular.class);
        circular.manufacture();
        Shape rectangle = shapeFactory.getClass(Rectangle.class);
        rectangle.manufacture();
        AbstractFactory colorFactory = new ColorFactory();
        Color green = colorFactory.getClass(Green.class);
        green.fill();
        Color red = colorFactory.getClass(Red.class);
        red.fill();

    }
}

  • 运行结果:
  • 优点
    当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
  • 缺点:
    产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。
  • 使用场景:
    1、QQ 换皮肤,一整套一起换。 2、生成不同操作系统的程序。

(总结参考:菜鸟教程)

当前文集 :Java设计模式
代码:GitHub

相关文章

  • Java设计模式教程

    Java设计模式教程 Java工厂设计模式 Java抽象工厂模式 Java单例模式 Java建造者(Builder...

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

  • 代码段简单学习设计模式 -- 抽象工厂模式

    《JAVA与模式》之抽象工厂模式 大话设计模式 抽象工厂模式(Abstraci Factory): 提供一个创...

  • Java设计模式系列-抽象工厂模式

    原创文章,转载请标注出处:《Java设计模式系列-抽象工厂模式》 一、概述 抽象工厂模式是对工厂方法模式的再升级,...

  • 设计模式——工厂模式和抽象工厂模式

    Java设计模式——工厂模式 工厂模式和抽象工厂模式都属于创建型模式。 创建型模式这些设计模式提供了一种在创建对象...

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

  • 单件设计模式

    一、定义 设计模式 设计模式就是一种更好的编写代码方案。 常见设计模式 工厂设计模式、抽象工厂设计模式、抽象工厂设...

  • Java与模式

    《JAVA与模式》之简单工厂模式《JAVA与模式》之工厂方法模式《JAVA与模式》之抽象工厂模式

  • 总览

    1 书籍推荐 《Java设计模式》 2 分类 创建型模式 工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模...

网友评论

    本文标题:java设计模式——抽象工厂模式

    本文链接:https://www.haomeiwen.com/subject/jviqqftx.html