Android设计模式详解之工厂方法模式
创始人
2024-04-27 21:04:05
0

前言

工厂方式模式是创建型设计模式

定义:定义一个用于创建对象的接口,让子类决定实例化哪个类。

使用场景:在任何需要生成复杂对象的地方,都可以使用工厂方法模式。复杂对象适合使用工厂模式,用new就可以完成创建的对象无需使用工厂模式。

UML类图:
工厂方法模式UML
Product:抽象产品;
ConcreteProduct:具体产品;
Factory:抽象工厂;
ConcreteFactory:具体工厂;

实现实例

我们以数据存储方式举例,实际开发中数据存储方式可以有文件存储内存缓存等等,这里我们就使用工厂方法模式来实现:

简单工厂

  • IOHandler,定义存储规则;
interface IOHandler {/*** 添加*/fun add(key: String, value: String)/*** 移除*/fun remove(key: String)/*** 修改*/fun update(key: String, value: String)/*** 查找*/fun query(key: String): String}
  • FileHandler,文件存储方式
class FileHandler : IOHandler {override fun add(key: String, value: String) {}override fun remove(key: String) {}override fun update(key: String, value: String) {}override fun query(key: String): String {return ""}
}
  • MemoryHandler,内存存储方式
class MemoryHandler : IOHandler {override fun add(key: String, value: String) {}override fun remove(key: String) {}override fun update(key: String, value: String) {}override fun query(key: String): String {return ""}
}
  • IOHandlerFactory,简单工厂,用于产品生产;
object IOHandlerFactory {enum class TYPE {MEMORY, FILE}fun createIOHandler(type: TYPE): IOHandler {return when (type) {TYPE.MEMORY -> MemoryHandler()TYPE.FILE -> FileHandler()}}
}
  • 测试类,调用简单工厂进行产品生产;
object Test {@JvmStaticfun main(args: Array) {val memoryIOHandler = IOHandlerFactory.createIOHandler(IOHandlerFactory.TYPE.MEMORY)memoryIOHandler.add("key", "value")}
}

工厂方法模式

工厂方法模式相较于简单工厂新增工厂接口以及具体工厂创建类;

  • IOFactory,工厂接口;
interface IOFactory {fun createIOHandler(): IOHandler
}
  • FileIOFactory,文件存储具体工厂类;
/*** 文件存储具体工厂*/
class FileIOFactory : IOFactory {override fun createIOHandler(): IOHandler {return FileHandler()}
}
  • MemoryIOFactory,内存存储具体工厂类;
/*** 内存具体工厂*/
class MemoryIOFactory : IOFactory {override fun createIOHandler(): IOHandler {return MemoryHandler()}
}
  • 测试类,通过工厂方法进行产品生产;
object Test {@JvmStaticfun main(args: Array) {val fileFactory = FileIOFactory().createIOHandler()fileFactory.add("key", "value")val memoryFactory = MemoryIOFactory().createIOHandler()memoryFactory.add("key", "value")}
}

Android中的工厂模式

  • setContentView(View view)方法
    为什么说这个方式使用到了工厂模式呢?我们这么调用:
    setContentView(LinearLayout(this)),我们知道LinearLayout继承于ViewGroup,而ViewGroup又是View的子类,这个方法满足让子类决定实例化哪个类,故而采用的是工厂模式。

总结

优点:对象的创建统一交给工厂去生成,有良好的封装性,同时也做到了解耦,也满足最少知识原则;

缺点:每次添加新的产品都需要新增产品类和对应的工厂类,会导致类结构复杂化,因此需要结合实际情况去评估是否使用工厂模式。

结语

如果以上文章对您有一点点帮助,希望您不要吝啬的点个赞加个关注,您每一次小小的举动都是我坚持写作的不懈动力!ღ( ´・ᴗ・` )

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...