慢慢说设计模式:抽象工厂

小Q:什么是设计模式

慢慢:设计模式是系统服务设计中针对常见场景的一种解决方案,可以解决功能逻辑开发中遇到的共性问题。设计模式并不局限最终的实现方案,而是在这种概念模式下,解决系统设计中的代码逻辑问题。

小Q:什么是抽象工厂

慢慢:工厂模式是创建物品的工厂,而抽象工厂则是创建工厂的工厂。这种设计模式也属于创建型模式。例如五菱公司,既有生产汽车的工厂,也有生产口罩的工厂。

也就是说,在工厂的基础上,当有很多个工厂时,创建一个上一级的工厂来对其进行管理。

小Q:快点上代码把!

慢慢:好的。还是根据以前工厂的模式创建出工厂和物品。

// 颜色父接口
public interface Color {
    void fill();
}
// 颜色:蓝色
public class Blue implements Color {
    public void fill() {
        System.out.println("blue");
    }
}
// 颜色:红色
public class Red implements Color {
    public void fill() {
        System.out.println("red");
    }
}
// 颜色工厂
public class ColorFactory {
    public Color getColor(Class<? extends Color> colorClass) throws IllegalAccessException, InstantiationException {
        return colorClass.newInstance();
    }
}

以上就完成工厂模式的基本创建,我们再创建另一个工厂模式

// 形状父接口
public interface Shape {
    void showShap();
}
// 形状:矩形
public class Rectangle implements Shape {
    public void showShap() {
        System.out.println("rectangle");
    }
}
// 形状:正方形
public class Square implements Shape {
    public void showShap() {
        System.out.println("square");
    }
}
// 形状工厂
public class ShapeFactory {
    public Shape getShape(Class<? extends Shape> shapeClass) throws IllegalAccessException, InstantiationException {
        return shapeClass.newInstance();
    }
}

上述就是两个工厂模式的创建过程。接下来我们再创建一个抽象工厂对这两个工厂进行管理。

public class AbstractFactory {
    final ColorFactory colorFactory;  // 简单的单例模式,不会重复生产
    final ShapeFactory shapeFactory;
    public AbstractFactory() {
        colorFactory = new ColorFactory();
        shapeFactory = new ShapeFactory();
    }
  
    public ColorFactory getColorFactory() {
        return colorFactory;
    }
    public ShapeFactory getShapgeFactory() {
        return shapeFactory;
    }
}

测试:

public class AbstractFactoryTest {
    public static void main(String[] args) throws InstantiationException, IllegalAccessException {
        AbstractFactory factory = new AbstractFactory();  // 获取抽象工厂
        ColorFactory colorFactory = factory.getColorFactory();  // 从抽象工厂中得到颜色工厂
        ShapeFactory shapeFactory = factory.getShapgeFactory();  // 从抽象工厂中得到形状工厂
        Color color = colorFactory.getColor(Blue.class);   // 从颜色工厂中获取颜色
        Shape shape = shapeFactory.getShape(Rectangle.class);  // 从形状工厂中获取形状
        color.fill();
        shape.showShap();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慢慢编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值