前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java常用设计模式--三种工厂模式之抽象工厂模式(Abstract Factory Pattern)

Java常用设计模式--三种工厂模式之抽象工厂模式(Abstract Factory Pattern)

作者头像
gang_luo
发布2020-08-13 11:37:34
2920
发布2020-08-13 11:37:34
举报
文章被收录于专栏:gang_luogang_luogang_luo

抽象工厂方法模式角色:

  1. 抽象工厂(AbstractFactory)角色 :是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。
  2. 具体工厂类(ConreteFactory)角色 :这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建某一种产品对象。
  3. 抽象产品(Abstract Product)角色 :工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。
  4. 具体产品(Concrete Product)角色 :抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。在抽象工厂中创建的产品属于同一产品族,这不同于工厂模式中的工厂只创建单一产品,。

抽象工厂模式与工厂方法模式的区别?

抽象工厂是生产创建一组相关或者相互依赖的产品对象,这些产品对象必须相互是有关系或有依赖的,而工厂方法中的工厂是生产单一产品对象的工厂。

学习抽象工厂具体实例之前,应该明白两个重要的概念:产品族产品等级

所谓产品族,是指位于不同产品等级结构中,功能相关联的产品组成的家族

抽象工厂模式所提供的一系列产品就组成一个产品族;

而工厂方法提供的一系列产品称为一个等级结构。

拿手机的例子来说明他们之间的区别:比如华为P30的运行内存、机身内存、电池容量组成一个产品族和小米10的运行内存、机身内存、电池容量产品族,而这两个产品族都来自三个产品等级:运行内存、机身内存、电池容量

package com.example.abstractfactory;

public interface IHuawei {

    void show();

}
package com.example.abstractfactory;

public interface IXiaomi {

    void show();

}
package com.example.abstractfactory;

public class HuaWeiP30 implements IHuawei {
    @Override
    public void show() {
        System.out.println("我是华为p30");
    }
}
package com.example.abstractfactory;

public class XiaoMi10 implements IXiaomi {
    @Override
    public void show() {
        System.out.println("我是小米10");
    }
}
package com.example.abstractfactory;

public interface IFactory {

    IHuawei createHuaWei();

    IXiaomi createXiaoMi();

}
package com.example.abstractfactory;

public class Factory implements  IFactory{
    @Override
    public IHuawei createHuaWei() {
        return new HuaWeiP30();
    }

    @Override
    public IXiaomi createXiaoMi() {
        return new XiaoMi10();
    }
}
package com.example.abstractfactory;

public class Test {

    public static void main(String[] args) {
        IFactory factory = new Factory();
        factory.createHuaWei().show();
        factory.createXiaoMi().show();
    }

}

抽象工厂模式的优点

  • 分离接口和实现

  客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已。也就是说,客户端从具体的产品实现中解耦。

  • 使切换产品族变得容易

  因为一个具体的工厂实现代表的是一个产品族,比如上面例子的从huawei系列到xiaomi系列只需要切换一下具体工厂。

抽象工厂模式的缺点

  • 不太容易扩展新的产品

  如果需要给整个产品族添加一个新的产品,那么就需要修改抽象工厂,这样就会导致修改所有的工厂实现类。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 抽象工厂方法模式角色:
  • 抽象工厂模式的优点
  • 抽象工厂模式的缺点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档