抽象工厂模式

今天来学习一下抽象工厂模式,在学习之前有两个非常重要的概念,产品等级,产品族。

产品等级就是说,一类产品,比如电视机属于一类产品,不管它是什么牌子的,他都属于电视,再比如冰箱,也属于一个产品等级。

产品族是说由不同产品等级组成的产品家族,比如海尔冰箱,海尔电视等等组成海尔产品族。再比如小米电视,手机,电脑等等组成小米产品族。

抽象工厂模式是要创造出一个产品族。

我们以一个画画的例子来解释其中的具体内容。简单起见,我要画一个红色矩形,绿色圆形。这时我要有两个产品等级,形状和颜色,然后这两个等级组成具体的产品族(抽象工厂)而红色矩形就为具体工厂。

接下来代码实现,先来定义两个产品等级,形状和颜色,分别有一个画和填充的方法

public interface Shape {
    void draw();
}
public interface Color {
    void fill();
}

然后定义具体的产品,也就是具体的形状,颜色

// 矩形
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("矩形");
    }
}
// 圆形
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("圆形");
    }
}
// 红色
public class Red implements Color {
    @Override
    public void fill() {
        System.out.println("红色");
    }
}
// 绿色
public class Green implements Color {
    @Override
    public void fill() {
        System.out.println("绿色");
    }
}

一个形状和一个颜色组成了我们的抽象工厂

abstract class AbstractFactory {
    public abstract Shape createShape();

    public abstract Color createColor();
}

现在我需要一个红色矩形,代码如下

public class RedRectangle extends AbstractFactory {
    @Override
    public Shape createShape() {
        return new Rectangle();
    }

    @Override
    public Color createColor() {
        return new Red();
    }
}

再比如我想要一个绿色圆形

public class GreenCircle extends AbstractFactory {
    @Override
    public Shape createShape() {
        return new Circle();
    }

    @Override
    public Color createColor() {
        return new Green();
    }
}

接下来看我们如何画出这两个形状

public class Main {
    public static void main(String[] args) {
        
        // 画红色矩形
        AbstractFactory factory = new RedRectangle();
        factory.createShape().draw();
        factory.createColor().fill();
        
        // 画绿色圆形
        AbstractFactory factory1 = new GreenCircle();
        factory1.createShape().draw();
        factory1.createColor().fill();
    }
}

运行结果如下

矩形
红色
圆形
绿色

我如果想画红色圆形直接新建一个RedCircle类即可,继承AbstractFactory
欢迎评论区交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值