(4)抽象工厂模式

一、概念

        简单工厂模式和工厂模式,不管工厂怎么拆分抽象,都只是针对一类产品Phone(AbstractProduct),如果要生成另一种产品PC,比如小米电脑,苹果电脑应该怎么表示呢?

        最简单的方式是把工厂方法模式完全复制一份,不过这次生产的是PC。但同时也就意味着我们要完全复制和修改Phone生产管理的所有代码,显然这是一个笨办法,并不利于扩展和维护。

        抽象工厂模式通过在AbstarctFactory中增加创建产品的接口,并在具体子工厂中实现新加产品的创建,当然前提是子工厂支持生产该产品。否则继承的这个接口可以什么也不干。

抓住重点,系列产品同一工厂实现

二、UML图

从上面类图结构中可以清楚的看到如何在工厂方法模式中通过增加新产品接口来实现产品的增加的。

接下来我们继续通过小米和苹果产品生产的例子来解释该模式。

为了弄清楚上面的结构,我们使用具体的产品和工厂来表示上面的UML类图,能更加清晰的看出模式是如何演变的:

三、代码实例

phone抽象类

public abstract class AbstractPhone { 
    abstract void name();
 }

 xiaomi phone实现

public class XiaoMiPhone extends AbstractPhone {
    @Override
    public void name() {
        System.out.println("xiaomi phone");
    }
}

apple phone实现

public class ApplePhone extends AbstractPhone {
    @Override
    public void name() {
        System.out.println("apple phone");
    }
}

pc抽象类

public abstract class AbstractComputer { 
    abstract void name();
 }

 xiaomi pc实现

public class XiaoMiComputer extends AbstractComputer {
    @Override
    void name() {
        System.out.println("xiao mi pc");
    }
}

apple pc实现

public class AppleComputer extends AbstractComputer {
    @Override
    void name() {
        System.out.println("apple pc");
    }
}

 工厂抽象类,定义工厂能干什么

public abstract class AbstractFactory {
    abstract AbstractPhone makePhone();
    abstract AbstractComputer makeComputer();
}

xiaomi工厂

public class XiaoMiFactory extends AbstractFactory { 
    @Override 
    public AbstractPersonalComputer makeComputer() { 
        return new XiaoMiComputer(); 
    } 
    
    @Override 
    public AbstractPhone makePhone() {
        return new XiaoMiPhone(); 
    } 
}

apple工厂

public class AppleFactory extends AbstractFactory {
    @Override
    AbstractPersonalComputer makeComputer() {
        return new AppleComputer();
    }

    @Override
    AbstractPhone makePhone() {
        return new ApplePhone();
    }
}

演示

public class AbstractFactoryPatternTest {

    public static void main(String[] args) {
        //创建工厂,工厂创建对象
        new XiaoMiFactory().makePhone().name();
        new XiaoMiFactory().makeComputer().name();
        new AppleFactory().makePhone().name();
        new AppleFactory().makeComputer().name();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值