抽象工厂模式(JAVA版)

抽象工厂模式

  • 定义:抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体的类

  • 适用场景:

    • 客户端(应用层)不依赖于产品类实例如何被创建、实现等细节
    • 强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量的重复代码
    • 提供一个产品类的库,所有的产品以同样的接口出现,从而使得客户端不依赖于具体的实现

UML类图

在这里插入图片描述
在这里插入图片描述

1、产品接口

手机

package com.lan.factory.abstract1;

//手机产品接口
public interface IphonProduct {

    void start();
    void shutdown();
    void callup();
    void sendSMS();
}

路由器

package com.lan.factory.abstract1;

//路由器产品接口
public interface IRouterProduct {

    void start();
    void shudown();
    void openWife();
    void setting();
}

抽象产品工厂

package com.lan.factory.abstract1;

//抽象产品工厂
public interface IProductFactory {

    //生产手机
    IphonProduct iphoneProduct();

    //生产路由器
    IRouterProduct routerProduct();
}

2、继承接口

2.1、小米系列

小米手机类 继承 手机接口

package com.lan.factory.abstract1;

//小米手机
public class XiaomiPhone implements IphonProduct {
    @Override
    public void start() {
        System.out.println("开启小米手机");
    }

    @Override
    public void shutdown() {
        System.out.println("关闭小米手机");
    }

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

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

小米路由器类 继承 路由器接口

package com.lan.factory.abstract1;

//小米路由器
public class XiaomiRouter implements IRouterProduct {
    @Override
    public void start() {
        System.out.println("启动小米路由器");
    }

    @Override
    public void shudown() {
        System.out.println("关闭小米路由器");
    }

    @Override
    public void openWife() {
        System.out.println("打开小米Wife");
    }

    @Override
    public void setting() {
        System.out.println("小米设置");
    }
}

2.2、华为系列

华为手机类 继承 手机接口

package com.lan.factory.abstract1;

//华为手机
public class HuanweiPhone implements IphonProduct {
    @Override
    public void start() {
        System.out.println("开启华为手机");
    }

    @Override
    public void shutdown() {
        System.out.println("关闭华为手机");
    }

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

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

华为路由器类 继承 路由器接口

package com.lan.factory.abstract1;

//华为工厂
public class HuaweiFactory implements IProductFactory {
    //华为手机
    @Override
    public IphonProduct iphoneProduct() {
        return new HuanweiPhone();
    }
    //华为路由器
    @Override
    public IRouterProduct routerProduct() {
        return new HuaweiRouter();
    }
}

3、测试

package com.lan.factory.abstract1;

public class Client {
    public static void main(String[] args) {

        System.out.println("===================小米系列产品===================");
        //小米工厂
        XiaomiFactory xiaomiFactory = new XiaomiFactory();

        IphonProduct iphonProduct = xiaomiFactory.iphoneProduct();  
        
        iphonProduct.callup(); //小米手机打电话
        iphonProduct.sendSMS();//小米手机发短信

        IRouterProduct iRouterProduct = xiaomiFactory.routerProduct();
        iRouterProduct.openWife();//打开小米Wife
        iRouterProduct.setting();// 小米设置
        

        System.out.println("===================华为系列产品===================");

        //华为工厂
        HuaweiFactory huaweiFactory = new HuaweiFactory();
        //手机
        IphonProduct iphonProduct1 = huaweiFactory.iphoneProduct();
        iphonProduct1.shutdown();//关闭华为手机
        iphonProduct1.callup();//华为手机打电话
        //路由器
        IRouterProduct iRouterProduct1 = huaweiFactory.routerProduct();
        iRouterProduct1.setting();//华为设置
        iRouterProduct1.openWife();// 打开华为Wife

    }
}

4、优缺点

  • 优点:
    • 具体产品在应用层的代码隔离,无需关心创建的细节
    • 将一个系列的产品统一到一起创建
  • 缺点:
    • 规定了所有可能被创建的产品集合,产品簇中扩展新产品困难
    • 增加了系统的抽象性和理解难度
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值