抽象工厂的理解

定义:抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体的类,围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。

 

//手机产品接口
public interface IPhoneProduct {
    void callup();
    void sendSMS();
}

//路由器产品接口
public interface IRouterProduct {
    void openwifi();
    void setting();
}

public class XiaomiPhone implements IPhoneProduct {
    @Override
    public void callup() {
        System.out.println("小米手机打电话");
    }

    @Override
    public void sendSMS() {
        System.out.println("小米手机发短信");
    }
}

public class XiaomiRouter implements IRouterProduct {
    @Override
    public void openwifi() {
        System.out.println("小米路由器打开WiFi");
    }

    @Override
    public void setting() {
        System.out.println("小米路由器设置参数");
    }
}

public class HuaweiPhone implements IPhoneProduct{
    @Override
    public void callup() {
        System.out.println("华为手机打电话");
    }

    @Override
    public void sendSMS() {
        System.out.println("华为手机发短信");
    }
}

public class HuaweiRouter implements IRouterProduct {
    @Override
    public void openwifi() {
        System.out.println("华为路由器打开WiFi");
    }

    @Override
    public void setting() {
        System.out.println("华为路由器设置参数");
    }
}

//抽象产品工厂 超级工厂
public interface IProductFactory {
    //生成手机
    IPhoneProduct getPhoneProduct();
    //生产路由器
    IRouterProduct getRouterProduct();
}

public class XiaomiFactory implements IProductFactory {
    @Override
    public IPhoneProduct getPhoneProduct() {
        return new XiaomiPhone();
    }

    @Override
    public IRouterProduct getRouterProduct() {
        return new XiaomiRouter();
    }
}

public class HuaweiFactory implements IProductFactory {
    @Override
    public IPhoneProduct getPhoneProduct() {
        return new HuaweiPhone();
    }

    @Override
    public IRouterProduct getRouterProduct() {
        return new HuaweiRouter();
    }
}

public class Client {
    public static void main(String[] args) {
        System.out.println("-------------小米系列---------------");
        XiaomiFactory xiaomiFactory = new XiaomiFactory();

        IPhoneProduct iPhoneProduct = xiaomiFactory.getPhoneProduct();
        iPhoneProduct.callup();
        iPhoneProduct.sendSMS();

        IRouterProduct routerProduct = xiaomiFactory.getRouterProduct();
        routerProduct.openwifi();
        routerProduct.setting();
        System.out.println("-------------华为系列---------------");
        HuaweiFactory huaweiFactory = new HuaweiFactory();

        IPhoneProduct phoneProduct = huaweiFactory.getPhoneProduct();
        phoneProduct.sendSMS();
        phoneProduct.callup();

        IRouterProduct routerProduct1 = huaweiFactory.getRouterProduct();
        routerProduct1.setting();
        routerProduct1.openwifi();
    }

}

 总结:适用于 客户端(应用层)不依赖于产品类实例如何被创建、实现等细节。

强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量的重复代码。

提供一个产品类的库,所有的产品以同样的接口出现,从而使得客户端不依赖于具体的实现

缺点也很明显,如果抽象工厂加生成类,将违背开闭原则,其他工厂的实现都得改动,增加产品族很容易增加产品难

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值