Java设计模式之抽象工厂模式

抽象工厂模式

  • 用来生产不同产品族的全部产品。对新增加的产品无能无力,支持增加产品族。
  • 抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。(本文示例参考自北京尚学堂java教程,高淇)

产品族:功能相关联的一系列产品的集合。如本文的示例,汽车中的发动机,座椅和轮胎可以看做为一个产品族,他们构成了汽车。

那么如果现在有一个汽车工厂的接口:

这时,引擎有多个子类:

public interface Engine {
    void run();
    void start();
}
class LuxuryEngine implements Engine{

    @Override
    public void run() {
        System.out.println("好引擎,跑得快!");
    }

    @Override
    public void start() {
        System.out.println("好引擎,启动快!");
    }

}

class LowEngine implements Engine{

    @Override
    public void run() {
        System.out.println("差引擎,跑得慢···");
    }

    @Override
    public void start() {
        System.out.println("差引擎,启动慢···");
    }

}

座椅也分档次:

public interface Seat {
    void massage();
}
class LuxurySeat implements Seat{

    @Override
    public void massage() {
        System.out.println("高档座椅可以按摩!");
    }

}
class LowSeat implements Seat{

    @Override
    public void massage() {
        System.out.println("低端座椅只能坐···");
    }

}

轮胎自然也有好坏:

public interface Tyre {
    void revolve();
}
class LuxuryTyre implements Tyre{

    @Override
    public void revolve() {
        System.out.println("高档轮胎超耐磨!");
    }

}
class LowTyre implements Tyre{

    @Override
    public void revolve() {
        System.out.println("低端轮胎不耐磨···");
    }

}

那么这时候,这个汽车应该如何组装,如何挑选配置呢?

public interface CarFactory {
    Engine createEngine();
    Seat createSeat();
    Tyre createTyre();
}

于是就出现了抽象工厂,现在我们需要一个高端的汽车,所有配置都是顶级的:

public class LuxuryFactory implements CarFactory{

    @Override
    public Engine createEngine() {
        return new LuxuryEngine();
    }

    @Override
    public Seat createSeat() {
        return new LuxurySeat();
    }

    @Override
    public Tyre createTyre() {
        return new LuxuryTyre();
    }

}

当然低端车也有市场:

public class LowFactory implements CarFactory{

    @Override
    public Engine createEngine() {
        return new LowEngine();
    }

    @Override
    public Seat createSeat() {
        return new LowSeat();
    }

    @Override
    public Tyre createTyre() {
        return new LowTyre();
    }

}

下面就是生产汽车了:

public class Test {
    public static void main(String[] args) {
        //产品族
        CarFactory factory = new LuxuryFactory();
        Engine e = factory.createEngine();
        e.start();
        e.run();
        Seat s = factory.createSeat();
        s.massage();
    }
}

可以看到输出:

好引擎,启动快!
好引擎,跑得快!
高档座椅可以按摩!

对于每一个产品族,都可以有一个具体工厂。来完成不同产品构成的产品族对象的创建。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值