大话编程-抽象工厂

抽象工厂模式(Abstract Factory Pattern)

提供一个创建一系列相关依赖对象的接口,而无需指定它们具体的类。

动机

客户仅与抽象类定义的接口交互,而不使用特定的具体类的接口。

适用场景

  • 一个系统要独立与它的产品创建,组合和表示时。

  • 一个系统要由多个产品系列中的一个来配置时。

  • 当你强调一系列相关的产品产品对象的设计以便进行联合使用时。

  • 当你提供一个产品库,而只想显示他们的接口而不是实现时。

结构

image.png

image.png

抽象工厂定义产品族,工厂方法定义产品等级

代码示例:两个外卖公司的性质

//抽象工厂
public abstract class AbstractFactory {
    public abstract RideHand createRideHand();
    public abstract TakeOut createTakeOut();
}
//骑手
public interface RideHand {
    RideHand rideHand();
    void show();
}
//外卖
public interface TakeOut {
    TakeOut takeOut();
    void show();
}
//美团骑手
public class MeituanRideHand implements RideHand {

    @Override
    public RideHand rideHand() {
        return new MeituanRideHand();
    }

    @Override
    public void show() {
        System.out.println("美团骑手");
    }
}
//美团外卖
public class MeituanTakeOut implements TakeOut{

    @Override
    public TakeOut takeOut() {
        return new MeituanTakeOut();
    }

    @Override
    public void show() {
        System.out.println("美团外卖");
    }
}
//饿了么骑手
public class ElemeRideHand implements RideHand{

    @Override
    public RideHand rideHand() {
        return new ElemeRideHand();
    }

    @Override
    public void show() {
        System.out.println("饿了么骑手");
    }
}
//饿了么外卖
public class ElemeTackout implements TakeOut {

    @Override
    public TakeOut takeOut() {
        return new ElemeTackout();
    }

    @Override
    public void show() {
        System.out.println("饿了么外卖");
    }
}
//饿了么工厂
public class ElemeFactory extends AbstractFactory {
    @Override
    public RideHand createRideHand() {
        return new ElemeRideHand();
    }

    @Override
    public TakeOut createTakeOut() {
        return new ElemeTackout();
    }
}
//美团工厂
public class MeituanFactory extends AbstractFactory {
    @Override
    public RideHand createRideHand() {
        return new MeituanRideHand();
    }

    @Override
    public TakeOut createTakeOut() {
        return new MeituanTakeOut();
    }
}
public class Client {
    public static void main(String[] args) {
        AbstractFactory elemeFactory = new ElemeFactory();
        RideHand rideHand = elemeFactory.createRideHand();
        TakeOut takeOut = elemeFactory.createTakeOut();
        rideHand.show();
        takeOut.show();
    }
}

:饿了么骑手
:饿了么外卖

总结

抽象工厂和工厂方法很相似,也是一个抽象类基类和多个具体工厂类,但抽象工厂的基类定义了多个虚拟工厂,每个工厂返回一个具体产品。相对工厂方法抽象工厂就像是包装了工厂方法一样,可以加入多个工厂共同协作。

大话编程那些事儿 wechat
欢迎关注微信公众号

访问更多文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值