抽象工厂模式详解

抽象工厂模式

1.定义:

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

与工厂方法模式的区别

工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。

理解产品族和产品等级

产品族:一个品牌下面的所有产品;例如华为下面的手机,路由器,电脑 称为华为的产品族;

产品等级:多个品牌下面的同种产品;例如华为和小米下面的手 称为一个产品等级;

1.1代码实现

1.1.1创建产品接口
package abstractfactory;
//电视接口
public interface TV {
    void create();
}
package abstractfactory;
//手机接口
public interface Phone {
    void create();
}
1.1.2定义具体产品的实现类
package abstractfactory;

public class HuWeiTV implements TV {
    @Override
    public void create() {
        System.out.println("创建华为电视");
    }
}
package abstractfactory;

public class XiaoMiTV implements TV{
    @Override
    public void create() {
        System.out.println("创建小米电视");
    }
}
1.1.3 创建超级工厂的接口
package abstractfactory;
//超级工厂接口
public interface factory {
    Phone createPhone();
    TV creatTV();
}
1.1.4 创建产品族(华为,小米)对应工厂的实现类
package abstractfactory;
//华为工厂
public class HuaWeiFactory implements factory{
    @Override
    public HuaWeiPhone createPhone() {
        System.out.println("华为工厂创建");
        return new HuaWeiPhone();
    }

    @Override
    public HuaWeiTV creatTV() {
        System.out.println("华为工厂创建");
        return new HuaWeiTV();
    }
}
package abstractfactory;
//小米工厂创建
public class XiaoMiFactory implements factory{
    @Override
    public XioaMiPhone createPhone() {
        System.out.println("小米工厂创建");
        return new XiaoMiPhone();
    }

    @Override
    public XiaoMiTV creatTV() {
        System.out.println("小米工厂创建");
        return new XiaoMiTV();
    }
}
1.1.5 测试最终使用
package abstractfactory;
public class Test {
    public static void main(String[] args) {
        factory huaWeiFactory = new HuaWeiFactory();
        huWeiTV.createPhone().create();
        factory xiaoMiFactory = new XiaoMiFactory();
        xiaoMiFactory.creatTV().create();
    }
}

结果展示:

类图:

2.抽象工厂模式的优缺点

**优点:**一个产品族(小米,华为品牌)中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象(将一个系列的产品统一一起创建);

缺点:

  • 产品族 扩展非常困难,要增加一个系列的某一产品,既要修改工厂抽象类里加代码,又修改具体的实现类里面加代码;

  • 增加了系统的抽象性和理解难度;

注意事项

产品族难扩展,产品等级易扩展。

3.适用场景

  • 一系列相关产品对象(属于同一产品族)一起创建时需要大量的重复代码;

  • 提供一个产品类的库,所有的产品以同样的接口出现,从而使得客户端不依赖于具体的实现;

4.使用注意

  • 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

  • 主要解决:主要解决接口选择的问题。

  • 何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。

  • 如何解决:在一个产品族里面,定义多个产品。

  • 关键代码:在一个工厂里聚合多个同类产品。

小结:抽象工厂模式是为了让创建工厂和一组产品与使用相分离,并可以随时切换到另一个工厂以及另一组产品;抽象工厂模式实现的关键点是定义工厂接口和产品接口,但如何实现工厂与产品本身需要留给具体的子类实现,客户端只和抽象工厂与抽象产品打交。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

中分头背带裤

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

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

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

打赏作者

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

抵扣说明:

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

余额充值