首页 > 其他 > 详细

大话编程-抽象工厂

时间:2020-05-31 14:38:23      阅读:60      评论:0      收藏:0      [点我收藏+]

抽象工厂模式(Abstract Factory Pattern)

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

 


动机:

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

 


适用场景:

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

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

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

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

 


结构:

   技术分享图片

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

 技术分享图片


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

//抽象工厂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();    }}
:饿了么骑手:饿了么外卖

 

总结:

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

 技术分享图片
欢迎关注微信公众号

大话编程-抽象工厂

原文:https://www.cnblogs.com/dhcq/p/12997422.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!