设计模式-抽象工厂

定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

特点:一个抽象工厂类,多个产品抽象类。一个工厂类可以产生一系列产品族的产品。抽象工厂支持多个产品,这也是和简单工厂、工厂方法的最大区别。

优点:解耦。

缺点:代码结构复杂,不一样维护

 第一步:定义产品接口:抽象工厂支持多个产品,所以我们定义两个产品接口。

//扫描头产品接口
public interface IScanHardware {
    public  String getBarcode();
}
//RFID 接口
public interface IRFIDRead {
    public String read();
}

实现扫描接口

//霍尼扫描头
public class Honeywell implements IScanHardware {
    @Override
    public String getBarcode() {
        return "Honeywell_barcodeData";
    }
}

//moto的扫描头
public class MOTO implements IScanHardware {
    @Override
    public String getBarcode() {
        return "Moto_barcodeData";
    }
}

  实现RFID读卡接口

//霍尼 RFID读卡实现类
public class HoneywellRFID implements IRFIDRead {
    @Override
    public String read() {
        return "honeywell--rfid";
    }
}

//moto RFID读卡实现类
public class MOTORFID implements IRFIDRead {
    @Override
    public String read() {
        return "moto--rfid";
    }
}

第二步:定义抽象工厂

public abstract class AbstractFactory {
    public abstract IRFIDRead createRFID();
    public abstract IScanBarcede createBarcode();
}

实现抽象工厂

//moto 产品
public class MOToFactory extends AbstractFactory {
    @Override
    public IRFIDRead createRFID() {
        return new MOTORFID();
    }

    @Override
    public IScanBarcede createBarcode() {
        return new MOTOBarcode();
    }
}


//霍尼产品

public class HoneywellFactory extends AbstractFactory {
    @Override
    public IRFIDRead createRFID() {
        return  new HoneywellRFID();
    }

    @Override
    public IScanBarcede createBarcode() {
        return new HoneywellBarcode();
    }
}

第三步:测试类

public class ScanBarcodeTest {

    public void main(){

        IRFIDRead  rfidRead=null;
        IScanBarcede scanBarcode=null;

        //moto 的扫描头和 rfid 得到的数据
        MOToFactory moToFactory=new MOToFactory();
        scanBarcode=moToFactory.createBarcode();
        rfidRead=moToFactory.createRFID();
        rfidRead.read();
        scanBarcode.getBarcode();

        //honeywell 的扫描头和 rfid 得到的数据
        HoneywellFactory honeywellFactory=new HoneywellFactory();
        scanBarcode=honeywellFactory.createBarcode();
        rfidRead= honeywellFactory.createRFID();
        rfidRead.read();
        scanBarcode.getBarcode();
    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值