首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
数据库
›
SQL-Server
›
iOS中的计划模式(三)- 工厂方法
返回列表
发新帖
iOS中的计划模式(三)- 工厂方法
[复制链接]
发表于 2025-11-6 14:10:52
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
弁言
险些在每个用面向对象语言开发的应用步调中,都能见到工厂方法模式的身影。它是
抽象工厂模式
的核心构成部分。通过重载抽象工厂父类中界说的工厂方法,各种具体工厂可以大概创建属于本身的对象。
在工厂方法模式中,
生产者
本身并不愿定是抽象工厂,它可以是恣意类。关键在于不直接创建对象实例,而是通过工厂方法创建对象,并以抽象范例返回。这种计划使得
代码
对具体类的依靠低沉,便于扩展和维护。
什么是工厂方法
工厂方法也称为假造构造器。它实用于这种环境:一个类无法渔区必要天生谁人范例的对象,像让其子类来指定所天生的对象。
抽象的Product界说了工厂方法创建的对象的接口。而实际的产物ConcreteProduct实现了Product接口。Creator界说了返回Product对象的工厂方法。它也可以为工厂方法界说一个默认的实现。返回一个默认的ConcrereProduct对象。Creator的别的操纵可以调用此工程方法来创建Product对象。ConcrereCreator是Creator的子类。它重载了工厂方法,以返回ConcreteProduct的实例。
工厂方法的最初界说就是专注于让子类决定创建什么对象。
什么时间利用工厂方法
工厂方法模式特殊恰当以了局景:
当类不知道必要实例化的具体对象时
(比方,利用协议或基类体现的对象)。
必要将对象的创建逻辑与利用逻辑解耦时
(比方,在网络层或
数据分析
层)。
必要支持多种对象范例,而且范例会随需求变革时
。
与简朴工厂模式相比,工厂方法提供了更大的机动性;与抽象工厂模式相比,它更关注单个对象的创建逻辑而非一组对象。
通过工厂方法模式,你的
代码
将可以大概以更高的可扩展性和机动性应对变革,为复杂应用提供强盛的支持。
怎样利用工厂方法
我们以实际开发中适配深色模式和淡色模式为例, 这个场景非常恰当创建多个具体的工厂。每个模式都可以有本身独特的风格和组件。我们可以通过每个工厂为特定模式创建适配的UI组件。
具体
代码
如下:
起首是界说组件的接口(Product)。
protocol ThemeComponent {
func render()
}
复制代码
接着我们来界说具体的组件,他们必要依照ThemeComponent并实现ThemeComponent中界说的方法。
class LightButton: ThemeComponent {
func render() {
print("Rendering a light-themed button.")
}
}
class DarkButton: ThemeComponent {
func render() {
print("Rendering a dark-themed button.")
}
}
class LightTextField: ThemeComponent {
func render() {
print("Rendering a light-themed text field.")
}
}
class DarkTextField: ThemeComponent {
func render() {
print("Rendering a dark-themed text field.")
}
}
复制代码
接下来我们必要界说工厂接口(Creator),来创建产物。
protocol ThemeFactory {
func createButton() -> ThemeComponent
func createTextField() -> ThemeComponent
}
复制代码
末了依照Creator来界说具体的工厂(ConcreteCreator),创建具体的产物。
class LightThemeFactory: ThemeFactory {
func createButton() -> ThemeComponent {
return LightButton()
}
func createTextField() -> ThemeComponent {
return LightTextField()
}
}
class DarkThemeFactory: ThemeFactory {
func createButton() -> ThemeComponent {
return DarkButton()
}
func createTextField() -> ThemeComponent {
return DarkTextField()
}
}
复制代码
在代码中利用工厂时,只必要根据主题模式来创建差异的工厂,而创建具体组件的任务交给工厂即可。
// 假设通过用户设置或系统获取主题
let isDarkMode = true
let factory: ThemeFactory = isDarkMode ? DarkThemeFactory() : LightThemeFactory()
// 使用工厂创建组件
let button = factory.createButton()
let textField = factory.createTextField()
// 渲染组件
button.render()
textField.render()
复制代码
当isDarkModel == true时:
Rendering a dark-themed button.
Rendering a dark-themed text field.
复制代码
当isDarkModel == false时:
Rendering a light-themed button.
Rendering a light-themed text field.
复制代码
工厂方法在实际项目中的利用
在多主题的应用中,通常我们都会利用到工厂方法,通过将对象的创建与利用解耦,来根据差异的需求机动地天生符合的对象。
起首界说一个主题协议,内里会界说各种颜色、图片大概是UI组件,但不必要提供实现:
public protocol MWThemeProtocol {
/// 主题颜色
var themeColor:UIColor { get }
/// 主要
容器
背景颜色
var containerBgColor:UIColor { get }
/// 次要
容器
背景颜色
var secondaryContainerBgColor:UIColor { get }
/// 主要文字颜色
var primaryTextColor:UIColor { get }
...
}
复制代码
接下来创建一个具体的工厂来服从该协议,并实现全部方法,返回该工厂指定样式的内容:
public class MWThemeNormalFactory: MWThemeProtocol {
/// 主题颜色
public var themeColor: UIColor {
return UIColor.red
}
/// 主要
容器
背景颜色
public var containerBgColor: UIColor {
return UIColor.white
}
/// 次要容器背景颜色
public var secondaryContainerBgColor: UIColor {
return .wm_hex("#EFF1F5")
}
/// 主要文本颜色
public var primaryTextColor: UIColor {
return .wm_hex("#11111B")
}
/// 次要文本颗色
public var secondaryTextColor: UIColor {
return .wm_hex("#6C7086")
}
...
}
复制代码
创建别的一个工厂,也依照该协议并实现全部方法,返回该工厂指定样式的内容:
public class MWThemeDarkFactory: MWThemeProtocol {
/// 主题颜色
public var themeColor: UIColor {
return UIColor.red
}
/// 主要容器背景颜色
public var containerBgColor: UIColor {
return .wm_hex("#11111B")
}
/// 次要容器背景颜色
public var secondaryContainerBgColor: UIColor {
return .wm_hex("#1E1E2E")
}
/// 主要文本颜色
public var primaryTextColor: UIColor {
return .wm_hex("#FFFFFF")
}
/// 次要文本颗色
public var secondaryTextColor: UIColor {
return .wm_hex("#BCC0CC")
}
...
}
复制代码
一个多主题应用的重要主题体系的核心部分就构建完成了,接下来我们只必要根据差异的主题来创建差异的工厂,工厂内部会创建该主题对应的UI元素。
public class MWThemeHelper: NSObject {
/// 创建主题工厂
public static var themeFactory:MWThemeProtocol = MWThemeNormalFactory()
/// 启动设置主题
public static func setupTheme() {
// 读取系统深色模式设置
}
/// 更新主题
private static func updateTheme(themeType:MWThemeType) {
switch themeType {
case .light:
themeFactory = MWThemeNormalFactory()
case .dark:
themeFactory = MWThemeDarkFactory()
}
}
....
}
复制代码
结语
在多主题的应用中,工厂方法模式显得尤为告急。通过将对象的创建与利用解耦,我们可以大概根据差异的需求和情境机动地天生符合的对象,尤其是在必要支持多个界面主题时。工厂方法不光能资助我们维持代码的清楚和扩展性,还能有用应对不停变革的需求。最告急的是,机动利用工厂方法,可以进步代码的可维护性和可重用性,从而打造更加高效和可靠的应用步调。在计划时,将工厂方法与差异的需求场景连合,可以让我们的应用更具顺应性,且易于扩展。
回复
使用道具
举报
返回列表
浏览过的版块
Java
分布式数据库
.Net
数据仓库与分析
物联网
立聪堂德州十三局店
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表