六&七、工厂模式
本文最后更新于 938 天前,其中的信息可能已经有所发展或是发生改变。

工厂模式

作用

唯一的职责就是创建对象,将复制的创建过程,获取对象的逻辑与对象的使用进行解耦。

分为简单工厂、工厂方法、抽象工厂。

简单工厂

对象获取逻辑复杂时,例如根据文件类型获取对应的解析器,解析器有很多,就需要在使用对象前,进行臃肿的逻辑判断,才能获取对应的解析器对象。造成获取对象与使用对象耦合,不好扩展。后续新增解析器,又得在获取对象那里添砖加瓦了,不符合开闭原则。

将复杂的、需要扩展的对象创建和对象获取抽取出来,就是简单工厂了。

ParserFactoryfsdfds

ParserFactory 简单工厂类

public class ParserFactory {
    // 如果是单例,可使用依赖注入优化
    private static Map<String, Supplier<Parser>> instances= Maps.newHashMap();

    static {
        instances.put(ParserConstant.JSON, JsonParser::new);
        instances.put(ParserConstant.XML,XmlParser::new);
        instances.put(ParserConstant.YMAL, YmalParser::new);
    }

    public static Parser newInstance(String format) {
        return instances.get(format)
                        .get();
    }
}

工厂方法

如果创建对象过程复杂,多个对象创建逻辑都放到简单工厂里,在类这个抽象层面来看,是不符合单一职责原则的。于是将各个对象创建过程封装到单独的工厂类里,然后创建工厂的工厂,用于封装获取工厂类的逻辑。这点类似于简单工厂类,只是获取的是工厂对象而非目标对象罢了。

Packagegrertrerter

抽象工厂

抽象工厂是对工厂方法里的工厂进行扩展,每个工厂能产生不同类型的对象(不常见)

sadfdgdfg

扩展

在JDK中工厂方法的命名有些规范

  1. valueOf() 返回与入参相等的对象
    例如 Integer.valueOf()
  2. getInstance() 返回单例对象
    例如 Calendar.getInstance()
    特殊情况:Calendar.getInstance()返回的不是单例
  3. newInstance() 每次调用时返回新的对象
    例如 HelloWorld.class.getConstructor().newInstance()
作者:Yuyy
博客:https://yuyy.info
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇