设计模式(八)之抽象工厂模式

什么是抽象工厂模式

不关心零件的具体实现,只关心接口,仅使用该接口将零件组装成为产品。

例子

不同厂商生产多个产品

AbstractFactory 生产冰箱空调电视机

package CreationPattern.AbstractFactoryMode;

/**
 * 抽象工厂
 */

public interface AbstractFactory {

    Refrigerator createRefrigerator ();

    AirConditioning createAirConditioning ();

    TV createTV();
}

Refrigerator

package CreationPattern.AbstractFactoryMode;

/**
 * 冰箱
 */

public class Refrigerator {
    public Refrigerator(String s) {
        System.out.println("create " + s + " refrigerator");
    }
}

AirConditioning

package CreationPattern.AbstractFactoryMode;

/**
 * 空调
 */

public class AirConditioning {
    public AirConditioning(String s) {
        System.out.println("create " + s + " airConditioning");
    }
}

TV

package CreationPattern.AbstractFactoryMode;

/**
 * 电视机
 */

public class TV {
    public TV(String s) {
        System.out.println("create " + s + " tv");
    }
}

HaierFactory

package CreationPattern.AbstractFactoryMode;

/**
 * 海尔品牌工厂
 */

public class HaierFactory implements AbstractFactory{

    String brand = "Haier";

    @Override
    public Refrigerator createRefrigerator() {
        return new Refrigerator(brand);
    }

    @Override
    public AirConditioning createAirConditioning() {
        return new AirConditioning(brand);
    }

    @Override
    public TV createTV() {
        return new TV(brand);
    }
}

GeliFactory

package CreationPattern.AbstractFactoryMode;

/**
 * 格力品牌工厂
 */

public class GeliFactory implements AbstractFactory{

    private String brand = "Geli";

    @Override
    public Refrigerator createRefrigerator() {
        return new Refrigerator(brand);
    }

    @Override
    public AirConditioning createAirConditioning() {
        return new AirConditioning(brand);
    }

    @Override
    public TV createTV() {
        return new TV(brand);
    }
}

Main

package CreationPattern.AbstractFactoryMode;

/**
 * Main
 */

public class Main {
    public static void main(String[] args) {
        AbstractFactory haierFactory = new HaierFactory();
        haierFactory.createRefrigerator();
        haierFactory.createAirConditioning();
        haierFactory.createTV();
        AbstractFactory geliFactory = new GeliFactory();
        geliFactory.createRefrigerator();
        geliFactory.createAirConditioning();
        geliFactory.createTV();
    }
}

结果
在这里插入图片描述

总结

抽象工厂模式是为了让创建工厂和一组产品与使用相分离,并可以随时切换到另一个工厂以及另一组产品;

抽象工厂模式实现的关键点是定义工厂接口和产品接口,但如何实现工厂与产品本身需要留给具体的子类实现,客户端只和抽象工厂与抽象产品打交道。

抽象工厂易于增加具体的工厂,而难以增加新的零件。从上述例子也不难看出,在AbstractFactory类中增加一个产品例如洗衣机,所有的具体工厂都需要增加洗衣机,而增加一个具体的工厂例如海信工厂只需实现AbstractFactory类。

简单工厂、工厂方法、抽象工厂区别

简单工厂:单个产品对应单个厂商,1对1。例如空调工厂只生产格力空调
工厂方法:单个产品对应多个厂商,1对多。例如空调工厂生成格力空调,还生产海尔空调
抽象工厂:多个产品对应多个厂商,多对多。例如工厂不仅生产不同品牌的空调,还生产不同品牌的冰箱。
总之,我的理解是抽象工厂和工厂方法的主要区别在于生产能力的不同。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值