设计模式之工厂模式

简介: 俗话说好的设计模式让一个产品走向更好,算了,其实就是我说的,在没了解设计模式之前,就是在写 “shi”山,满屏的ifelse,后来发现了设计模式,看到代码是真的优雅。

工厂模式其实是创建的模式,何为创建模式,就是为了方便对象的创建。拿最简单的登录来说,咱们系统需要接入,掘金、微信、QQ等三个接口,我们可以创建不同Service,在里面登录。在controller中判断是哪一个登录类型,然后进行ifelse判断,又是一大堆的ifelse。现在我们写一下相关代码。

String reqJson = JSON.toJSONString(req);
LoginRes loginRes = null;
try {
    logger.info("登录开始{}。req:{}", req.getuId(), reqJson);
    // 按照不同类型方法登录[1掘金、2微信、3QQ]
    if (req.getLoginType() == 1) {
        JuejinService juejinService = new JuejinService();
        JuejinResult juejinResult = juejinService.Login(data);
        if ("0000".equals(juejinResult.getCode())) {
            loginRes = new LoginRes("0000", "登录成功");
        } else {
            loginRes = new LoginRes("0001", JuejinResult.getInfo());
        }
    } else if (req.getLoginType() == 2) {
        WeixinService weixinService = new WeixinService();
        Boolean isSuccess = WeixinService.Login(data);
        if (isSuccess) {
            loginRes = new loginRes("0000", "登录成功");
        } else {
            loginRes = new AwardRes("0001", "登录失败");
        }
    } else if (req.getLoginType() == 3) {
        
        QQService qQService = new QQService();.
        Boolean isSuccess = qQService.Login(data);
         if (isSuccess) {
            loginRes = new loginRes("0000", "登录成功");
        } else {
            loginRes = new AwardRes("0001", "登录失败");
        }
    }
    logger.info("登录完成{}。", req.getuId());
} catch (Exception e) {
    logger.error("登录失败{}。req:{}", req.getuId(), reqJson, e);
    loginRes = new LoginRes("0001", e.getMessage());
}

return LoginRes;

这样如果我们继续加登录方法,会不断的写ifelse,同时这样看 你是不是觉得更加像 “shi”山了。
下面我们来用我们的工厂模式写一下。
首先自定义Login接口

public interface Login {

    void login(String uId, , Map<String, String> extMap) throws Exception;

}

所有登录方式、虚拟还是第三⽅,都需要通过我们的程序实现此接⼝进⾏处理,以保证最 终⼊参出参的统⼀性。 接⼝的⼊参包括; ⽤户ID、扩展字段等(再次举例子)
我们所有的无论是JuejinService WeixinService QQService 都需要实现这个接口然后再login内部进行自己的逻辑判断等等。
下面就是我们的重磅工厂了LoginFactory
再次我们进行判断。


public class LoginFactory {

    public Login getLoginService(Integer LoginType) {
        if (null == LoginType) return null;
        if (1 == LoginType) return new JuejinService();
        if (2 == LoginType) return new WeixinService();
        if (3 == LoginType) return new QQService();
        throw new RuntimeException("不存在的登录类型");
    }

}

这样是不是有条理多了。


@Test
public void test_commodity() throws Exception {
    LoginFactory loginFactory = new LoginFactory();

    // 1. Juejin
    Login loginService_1 = loginFactory.getLoginService(1);
    loginService_1.sendCommodity(data);

    // 2. Weixin
    Login loginService_2 = loginFactory.getLoginService(2);
    loginService_2.sendCommodity(data);

    // 3. QQ
    Login loginService_3 = loginFactory.getLoginService(3);
    loginService_3.login(data);

}

从上到下的优化来看,⼯⼚⽅法模式并不复杂,甚⾄这样的开发结构在你有所理解后,会发现更加简单了。 那么这样的开发的好处知道后,也可以总结出来它的优点;避免创建者与具体的产品逻辑耦合、满⾜单⼀职责,每⼀个业务逻辑实现都在所属⾃⼰的类中完成 、满⾜开闭原则,⽆需更改使⽤调⽤⽅就可以在程序中引⼊新的登录类型 。但这样也会带来⼀些问题。每次增加一个登录方式时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。所以还需要与其他设计模式相结合,才能打造出我开文提到的让一个产品走向更好(收尾呼应点题)。

目录
相关文章
|
设计模式 Java
设计模式~工厂模式-03
工厂模式 简单工厂模式 优点: 缺点: 工厂方法模式
56 0
|
设计模式 Java C++
设计模式之工厂模式详解和应用
设计模式之工厂模式详解和应用
76 0
|
7月前
|
设计模式 消息中间件 Java
设计模式之工厂模式(C++)
设计模式之工厂模式(C++)
96 0
|
7月前
|
设计模式 算法 uml
C++设计模式(工厂模式)
C++设计模式(工厂模式)
113 1
C++设计模式(工厂模式)
|
7月前
|
设计模式 前端开发 API
【设计模式】之工厂模式
工厂模式是一种常用的创建对象的设计模式,它通过封装对象的创建逻辑,提供统一的接口,实现了代码的解耦和可扩展性。在实际开发中,可以根据具体需求选择是否使用工厂模式来创建对象。工厂模式可以应用于任何需要创建对象的场景。通过使用工厂模式,我们可以提高代码的可维护性、可扩展性和可测试性,使得代码更加灵活和易于理解。
82 0
|
设计模式 前端开发 Java
设计模式之工厂模式(1)
工厂模式是一种对象创建型模式,它提供了一种创建对象的最佳实践。在工厂模式中,我们在创建对象时不使用 new 关键字,而是通过调用工厂方法来创建对象。工厂方法是一种在子类中定义的方法,该方法负责实例化对象。工厂方法可以返回不同的对象类型,因此工厂模式可以创建一组相关或不相关的对象。这样就可以将对象的创建和使用解耦。
73 0
|
设计模式 Java 数据库
设计模式之工厂模式(一)
设计模式之工厂模式
65 0
|
设计模式 消息中间件 Java
一起来学设计模式之工厂模式
前言 目前正在出一个设计模式专题系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~ 本节给大家讲一下设计模式中的工厂模式~ 本专题的所有案例代码主要以Java语言为主, 好了, 废话不多说直接开整吧~ 工厂模式 工厂模式是一种常用的设计模式,它提供了一种创建对象的方式,该方式隐藏了对象创建的细节并提供了一个通用的接口,从而使得代码更加灵活和可扩展。在工厂模式中,我们将对象的创建过程封装到一个工厂类中,通过工厂类来创建具体的对象,这样客户端就不需要关心对象的创建过程,只需要调用工厂类提供的接口来获取所需的对象即可。
|
设计模式 Java 测试技术
浅谈设计模式 - 工厂模式(六)
在第一篇里面已经介绍过简单工厂了,但是工厂模式里面不仅仅是简单工厂,还存在工厂方法和抽象工厂,并且从严格意义来讲简单工厂不能算是一种设计模式,本次的文章针对工厂的进化来展开讲一讲工厂模式的三种常见形式:简单工厂、工厂方法、抽象工厂。
75 0
|
设计模式 Java uml
《设计模式》工厂模式
《设计模式》工厂模式
《设计模式》工厂模式