进阶学习(3.1) Simple Factory Pattern 简单工厂模式

37 篇文章 0 订阅
25 篇文章 0 订阅

1,设计原则

工厂和工厂对象尽量都是高内聚的, 例如网上最多的例子, 支付案例, 一个支付工厂, 可以创建微信支付对象, 也可以创建支付宝支付对象, 他们都是属于支付

这样方便别人理解, 和代码重构, 改一处代码, 修复所有使用此功能的地方

 

2,优势

降低耦合, 肯定降低了呀, 你通过工厂方法获取一个工厂对象, 调用一些方法, 方法里面写的都是公用代码,需要替换逻辑的时候, 直接改变参数就可以切换到一个工厂对象了,

封装代码, 你写的代码变漂亮了, 恭喜你离面向对象又跟近了一步

 

3,上传文件场景

我就不写支付了, 网上的支付看的太多了,

工厂类

/**
 *  演示简单工厂
 */
public class UploadFactory {

    public static final String OSS = "OSS";
    public static final String LOCAL = "LOCAL";

    /**
     * 获取
     * @param type 需要采用什么方式上传对象
     * @return
     */
    public static UploadBean getUpload(String type) {
        System.out.println("文件上传日志~");
        if (OSS.equals(type)) {
            return new OssUpload();
        }
        if (LOCAL.equals(type)) {
            return new LocalStoreUpload();
        }
        System.out.println("错误不存在的上传方式");
        return null;
    }

    public static void main(String[] args) {
        UploadBean upload = UploadFactory.getUpload(LOCAL);
        // 这里只是演示, 我就不创建文件了
        upload.upload(null);
    }
}

工厂抽象对象

import java.io.File;

/**
 *  抽象工厂对象
 */
public interface UploadBean {

    /**
     * @param file  上传的文件
     * @return  是否成功
     */
    boolean upload(File file);
}

工厂实例对象1

/**
 *  上传文件对象实例一
 *  保存到本地对象
 */
public class LocalStoreUpload implements UploadBean{

    @Override
    public boolean upload(File file) {
        System.out.printf("保存本地成功");
        return true;
    }
}

工厂实例对象2

/**
 *  上传文件对象实例二
 *  上传到远程服务器
 */
public class OssUpload implements UploadBean{

    @Override
    public boolean upload(File file) {
        System.out.println("上传到远程服务器成功!");
        return true;
    }
}

 

4, 最后

    1, 可以看到的是, 通过切换不同的参数就可以实现业务逻辑切换, 参数确实可以提供一个Class 对象,以后新建另一种上传方式直接传class 对象就好了,

    2, 很多人肯定会问, 我为什么不直接把对象new 出来呢? 当然可以直接new出来调用, 但是有了封装就可以做很多事情了, 就比如你看 工厂里面的 getUpload, 打印了‘ 文件上传日志 ’, 在这个里面是可以做很多事情的, 你要是分开,是不是每个对象里面都得写日志, 这个得看你怎么使用了, 怎么理解, = _ =,

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值