所有分类
  • 所有分类
  • 未分类

工厂模式Java实战-不用设计模式的写法

简介

本文介绍不用工厂模式时创建对象的写法。

缺点

使用方手动地去new一个对象出来,如果构建这个对象很麻烦,会有如下两个问题:

  1. 使用方只是获得这个对象,不关心内部逻辑,但是却要自己去创建,不符合单一职责原则。
  2. 如果细节都放到使用方来做,代码会又臭又长。

实战

需求:根据参数(小米、华为)获取一个Phone(手机)对象,并调用它打电话方法。

代码结构

手机产品

接口

package com.knife.designPattern.product;
 
public interface Phone {
    /**
     * 打电话
     */
    String callUp();
}

实现类

小米手机实现类

package com.knife.designPattern.product.impl;

import com.knife.designPattern.product.Phone;
import lombok.Data;

@Data
public class XiaoMiPhoneImpl implements Phone {
    /**
     * CPU个数
     */
    private Integer cpuCount;

    /**
     * 内存大小
     */
    private Integer memoryStorage;

    public XiaoMiPhoneImpl(Integer cpuCount, Integer memoryStorage) {
        this.cpuCount = cpuCount;
        this.memoryStorage = memoryStorage;
    }
 
    @Override
    public String callUp() {
        return "小米手机打电话";
    }
}

华为手机实现类

package com.knife.designPattern.product.impl;

import com.knife.designPattern.product.Phone;
import lombok.Data;

@Data
public class HuaWeiPhoneImpl implements Phone {
    /**
     * CPU个数
     */
    private Integer cpuCount;

    /**
     * 内存大小
     */
    private Integer memoryStorage;

    public HuaWeiPhoneImpl(Integer cpuCount, Integer memoryStorage) {
        this.cpuCount = cpuCount;
        this.memoryStorage = memoryStorage;
    }

    @Override
    public String callUp() {
        return "华为手机打电话";
    }
}

测试代码

package com.knife.designPattern.controller;

import com.knife.designPattern.product.Phone;
import com.knife.designPattern.product.impl.XiaoMiPhoneImpl;
import com.knife.designPattern.product.impl.HuaWeiPhoneImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Api(tags = "产品")
@RestController
@RequestMapping("product")
public class ProductController {
    @ApiOperation("手机")
    @GetMapping("phone")
    public String phone(String name) {
        Phone phone = null;
        switch (name) {
            case "华为":
                phone =  new HuaWeiPhoneImpl(4, 21);
                break;
            case "小米":
                phone = new XiaoMiPhoneImpl(4, 21);
                break;
            default:
                return null;
        }

        return phone.callUp();
    }
}

源码下载

此隐藏内容仅限VIP查看升级VIP

测试

访问:http://localhost:8080/doc.html(当然,你用Postman也完全可以)

可以看到:调用了华为的打电话方法。

0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录