抽象工厂模式,对比简单工厂模式,工厂方法模式


1、抽象工厂模式定义

接着上文说的工厂方法模式,由于创建的子类产品越来越多,不仅有手机,还有电脑,耳机等其他产品时,难道每意见产品都需要创建一个工厂子类嘛?这显然是不合理的,因此引入抽象工厂方法模式—对产品类进行分组,组内不同产品对应同一个工厂类的不同方法。
定义:为一组相关联的产品创建一个接口,定义各种产品,而无需关注实现。

2、抽象工厂模式代码举例

首先看一下产品类的代码,手机和电脑是两个抽象接口,分别拥有高端和低端两个实现类:

/**
 * 电脑接口
 */
public interface Computer {
    public void create();
}

public class HigeComputer implements  Computer{
    @Override
    public void create() {
        System.out.println("创建高端电脑--------");
    }
}

public class LowComputer implements Computer {
    @Override
    public void create() {
        System.out.println("创建低端电脑--------");
    }
}


/**
 * 手机接口
 */
public interface MobilePhone {
    public void create();
}

public class HigeMobilePhone implements MobilePhone {
    @Override
    public void create() {
        System.out.println("创建高端手机--------");
    }
}

public class LowMobilePhone implements MobilePhone {
    @Override
    public void create() {
        System.out.println("创建低端手机--------");
    }
}

接下来是工厂类,由于产品分成了高端和低端两大组,工厂也相应分成了高端工厂和低端工厂,各自负责组内产品的创建:

/**
 * 工厂接口
 */
public interface Factory {

    Computer iCreateComputer();
    MobilePhone iCreateMobilePhone();
}

/**
 * 低端工厂
 */
public class LowFactory implements Factory{
    @Override
    public Computer iCreateComputer() {
        Computer lowComputer = new LowComputer();
        return lowComputer;
    }

    @Override
    public MobilePhone iCreateMobilePhone() {
        MobilePhone lowMobilePhone = new LowMobilePhone();
        return lowMobilePhone;
    }
}


/**
 * 高端工厂
 */
public class HigeFactory implements Factory{
    @Override
    public Computer iCreateComputer() {
        HigeComputer higeComputer = new HigeComputer();
        return higeComputer;
    }

    @Override
    public MobilePhone iCreateMobilePhone() {
        HigeMobilePhone higeMobilePhone = new HigeMobilePhone();
        return higeMobilePhone;
    }
}


最后是客户端代码,通过实例化不同的工厂子类,然后调用不同的方法,创建不同的产品

/**
 * 客户端测试类
 */
public class AbstractFactoryTest {
    public static void main(String[] args) {
        HigeFactory higeFactory = new HigeFactory();
        LowFactory lowFactory = new LowFactory();

        Computer higeComputer = higeFactory.iCreateComputer();
        Computer lowComputer = lowFactory.iCreateComputer();

        MobilePhone highMobilePhone = higeFactory.iCreateMobilePhone();
        MobilePhone lowMobilePhone = lowFactory.iCreateMobilePhone();

       higeComputer.create();
       lowComputer.create();
       highMobilePhone.create();
       lowMobilePhone.create();
    }
}

3、抽象工厂模式优缺点

优点:客户端只需要调用抽象工厂的接口来创建实例,并不需要关心具体的实例创建过程。

缺点:如果新增或删掉产品实例,就需要修改抽象接口和具体的产品条线

4、抽象工厂模式使用场景

系统中有多条产品线,同时多条产品线下的多个产品符合同一规则,就可以尝试使用抽象工厂模式构建

5、抽象工厂模式对比简单工厂模式,工厂方法模式的区别

简单工厂模式
简单工厂模式只有一个工厂类,而在工厂类中通过if-else判断或switch语句(违背了开放-封闭规则),来决定最终创建的产品对象实例。

工厂方法模式
工厂方法模式解决了简单工厂模式中的工厂类的条件判断问题,以产品性质划分出多个工厂类来实现工厂接口,利用多态创建不同的产品对象实例。

抽象工厂模式
抽象工厂模式解决了工厂方法模式中如果存在多个产品的问题,将产品子类进行分组,以产品条线为维度创建工厂类,同一个工厂类中的不同方法负责创建不同的产品。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定具体类。下面是介绍抽象工厂模式的教学方法: 1. 理论介绍: - 解释什么是抽象工厂模式抽象工厂模式是一种通过定义接口来创建一系列相关或相互依赖对象的设计模式。 - 强调抽象工厂模式的目的:它提供了一种将对象的创建与使用分离的方式,使得客户端代码更加灵活和可扩展。 - 举例说明抽象工厂模式的应用场景:比如在一个图形界面库中,可以使用抽象工厂模式来创建不同操作系统下的按钮和文本框。 2. 抽象工厂模式的结构: - 抽象工厂(Abstract Factory):定义了创建一系列产品对象的接口。 - 具体工厂(Concrete Factory):实现了抽象工厂接口,负责创建具体的产品对象。 - 抽象产品(Abstract Product):定义了产品对象的接口。 - 具体产品(Concrete Product):实现了抽象产品接口,是抽象工厂所创建的对象。 3. 实例演示: - 选择一个简单的示例,比如创建不同操作系统下的按钮和文本框。 - 编写抽象工厂接口,定义创建按钮和文本框的方法。 - 实现具体工厂类,分别创建Windows风格和Mac风格的按钮和文本框。 - 编写抽象产品接口,定义按钮和文本框的方法。 - 实现具体产品类,分别实现Windows风格和Mac风格的按钮和文本框。 4. 示例代码演示: - 提供一个简单的示例代码,展示如何使用抽象工厂模式来创建不同操作系统下的按钮和文本框。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值