iOS 建造者模式

2024-06-18 22:08
文章标签 模式 ios 建造

本文主要是介绍iOS 建造者模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


//【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

//原文地址http://www.cnblogs.com/wengzilin/p/4365855.html


///iOS 建造者模式



//感觉建造者模式与工厂方法模式非常类似,但是加入了指挥者类。



//工厂模式一般都是创建一个产品,注重的是把这个产品创建出来就行,只要创建出来,不关心这个产品的组成部分。从代码上看,工厂模式就是一个方法,用这个方法就能生产出产品

// 工厂模式把一个类的实例化延迟到它的子类中,核心的工厂类不负责所有产品的创建,而是将具体创建的工作交给子类去做。让子类决定实例化哪一个类。即抽象工厂角色

//建造者模式也是创建一个产品,但是不仅要把这个产品创建出来,还要关系这个产品的组成细节,组成过程。从代码上看,建造者模式在建造产品时,这个产品有很多方法,建造者模式会根据这些相同方法但是不同执行顺序建造出不同组成细节的产品。

//建造者模式将一个产品的内部表象和产品的生成过程分开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。

//需要构造的对象非常复杂,而调用者不需要知道这些细节

//建造模式的关键是导演角色,这个角色掌握了零件对象的状态和产品的整体组装蓝图。没有了这个角色,建造模式就不是建造模式。当然,导演角色可以同时持有几种蓝图,按照需要给出完全不同的组装结果。




//房子产品

class ZJLRoom:NSObject {

    

    var price:String!

    var roomColor:String!

    var size:String!

    var style:String!

    

    ///创建房子的方法

    classfunc creatBuilder(callback:((ZJLRoomBuilder)->Void)?) ->ZJLRoom {

        let builder =ZJLRoomBuilder()

        callback?(builder)

        return builder.build()

    }

    

    overrideinit() {

      

    }

    

    func lookRoom() {

        print(price)

        print(roomColor)

        print(size)

        print(style)

    }

}


//房子建造者  导演角色负责房子产品的组成以及各个

class ZJLRoomBuilder:NSObject {

    var price:String =""

    var roomColor:String =""

    var size:String =""

    var style:String =""

    

    func build() ->ZJLRoom {

        let room =ZJLRoom()

        room.price =price

        room.roomColor =roomColor

        room.size =size

        room.style =style

        return room

    }

}



//现在这个车有两种初始化方法 一种是:


/*

 

var room = ZJLRoom()

room.price = "100000"

room.roomColor = "白色"

room.size = "100m²"

room.style = "装修"

 

一种是:是在init方法里面实现


*/


//实际上,以上两种方式分别代表了两种iOS对象的初始化方式。在未使用建造者之前,这两种初始化对象方式都有不方便的地方。第一种方法灵活,但是如果你接触iOS时间长点就会发现,经常会记不住这个类到底有哪些属性需要初始化,尤其是当这个类是被人提供给你的时候!我们多么希望类的提供者能搞点注释啊啥的告知我们一下。第二种方法则很清晰地告诉调用者到底有哪些属性需要在创建对象时初始化。但是,当类的提供者有天跟你说:hey,哥们,现在业务逻辑改变了,我增加了一个xxx属性,init方法也变了。这时,你是不是很想打他?每新增一个新的属性,init方法就要变动,而且当需要初始化的属性多大十几二十个时,这个init方法要不要太壮观!

//所以,当某个类的属性值很多时,我们可以考虑使用建造者模式建造者来让初始化过程清晰一些,类的使用者会很感恩你这么做的。用iOS描述大概是这样的:


var room2 = ZJLRoom.creatBuilder { (builder)in

    builder.price ="883333"

    builder.roomColor ="紫色"

    builder.size ="2000m²"

    builder.style ="欧式9"

}


room2.lookRoom()

这篇关于iOS 建造者模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073190

相关文章

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

迭代器模式iterator

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/iterator 不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

springboot实战学习(1)(开发模式与环境)

目录 一、实战学习的引言 (1)前后端的大致学习模块 (2)后端 (3)前端 二、开发模式 一、实战学习的引言 (1)前后端的大致学习模块 (2)后端 Validation:做参数校验Mybatis:做数据库的操作Redis:做缓存Junit:单元测试项目部署:springboot项目部署相关的知识 (3)前端 Vite:Vue项目的脚手架Router:路由Pina:状态管理Eleme

状态模式state

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/state 在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。 在状态模式中,player.getState()获取的是player的当前状态,通常是一个实现了状态接口的对象。 onPlay()是状态模式中定义的一个方法,不同状态下(例如“正在播放”、“暂停

软件架构模式:5 分钟阅读

原文: https://orkhanscience.medium.com/software-architecture-patterns-5-mins-read-e9e3c8eb47d2 软件架构模式:5 分钟阅读 当有人潜入软件工程世界时,有一天他需要学习软件架构模式的基础知识。当我刚接触编码时,我不知道从哪里获得简要介绍现有架构模式的资源,这样它就不会太详细和混乱,而是非常抽象和易