抽象工厂模式

本文介绍了抽象工厂模式,以Iphone手机配件生产为例,阐述了如何根据手机型号自动匹配相应的配件型号。抽象工厂模式用于创建相关或依赖对象的家族,如Iphone7和Iphone8系列分别对应不同的配件型号。通过具体工厂类,可以避免指定具体配件型号,降低了耦合度。总结中提到,抽象工厂模式与工厂方法模式在实际应用中可以相互转换,关键在于关注降低耦合度的目标。
摘要由CSDN通过智能技术生成

抽象工厂模式

例子背景:
随着Ipone手机的销售火热。同时在**组装**Ipone手机的时候我们需要考虑到手机壳,手机其他配件等其他配件的匹配组装。于是这个工厂开始生产手机壳和其余手机配件,用来组装手机。这时候工厂有两个系列的产品:手机壳和其余配件。Iphone7系列配置A型号手机壳和A型号其余配件,Iphone8系列配置B型号手机壳和B型号其余配件。

概念:
抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。比如Iphone7系列使用A型号手机壳和A型号其余配件,而Iphone8系列使用B型号手机壳和B型号其余配件。那么使用抽象工厂模式,在为Iphone7系列生产相关配件时,就无需制定配件的型号,它会自动根据手机型号生产对应的配件型号A。


当每个抽象产品都有多于一个的具体子类的时候(手机壳有型号A和B两种,其余手机配件也有型号A和B两种),工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产品角色都有两个具体产品(产品手机壳有两个具体产品手机壳A和手机壳B)。抽象工厂模式提供两个具体工厂角色(Iphone7系列工厂和Iphone8系列工厂),分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。

产品类:

//手机壳以及型号    
public interface PhoneCase {

}

public class PhoneCaseA implements PhoneCase {
    public PhoneCaseA() {
        System.out.println("制造-->PhoneCase");
    }
}

public class PhoneCaseB implements PhoneCase {
    public PhoneCaseB() {
        System.out.println("制造-->PhoneCaseB");
    }
}

//其余手机配件以及型号    
public interface Debris {

}

public class DebrisA implements Debris {
    public DebrisA() {
        System.out.println("制造-->DebrisA");
    }
}

public class DebrisB implements Debris {
    public DebrisB() {
        System.out.println("制造-->DebrisB");
    }
}   

这里写图片描述      这里写图片描述

这里写图片描述      这里写图片描述

工厂类:

//创建工厂的接口    
public interface AbstractFactory {
    //制造手机壳  
    public PhoneCase createPhoneCase();

    //制造其余配件   
    public Debris createDebris();
}


//为Iphone7系列生产配件    
public class FactoryIphone7 implements AbstractFactory {

    @Override
    public PhoneCase createPhoneCase() {
        return new PhoneCaseA();
    }

    @Override
    public Debris createDebris() {
        return new DebrisA();
    }
}

//Iphone8系列  
public class FactoryIphone8 implements AbstractFactory {

    @Override
    public PhoneCase createPhoneCase() {
        return new PhoneCaseB();
    }

    @Override
    public Debris createDebris() {
        return new DebrisB();
    }
}  

这里写图片描述

这里写图片描述  这里写图片描述

客户类:

public class Customer {
    public static void main(String[] args) {
        //生产Iphone7系列配件  
        FactoryIphone7 factoryIphone7 = new FactoryIphone7();
        factoryIphone7.createPhoneCase();
        factoryIphone7.createDebris();

        //生产Iphone8系列配件    
        FactoryIphone8 factoryIphone8 = new FactoryIphone8();
        factoryIphone8.createPhoneCase();
        factoryIphone8.createDebris();
    }
} 
总结:

在使用时,经常你会发现,明明使用的工厂方法模式,当新需求来临,稍加修改,加入了一个新方法后,由于类中的产品构成了不同等级结构中的产品族,它就变成抽象工厂模式了;而对于抽象工厂模式,当减少一个方法使得提供的产品不再构成产品族之后,它就演变成了工厂方法模式。

所以,在使用工厂模式时,只需要关心降低耦合度的目的是否达到了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值