Tag: 原型

Swift中的原型设计模式

通过复制现有对象的所有属性并创建独立的克隆,原型模式用于实例化新对象。 当新对象的构造效率低下时,此做法特别有用。 想象一下,下面有一个SmartPhone类: 现在我们需要创建此类的5个实例,如下所示: 我们可以很容易地意识到许多实例具有相同的属性,因此我们经常复制代码行,然后以不同的方式编辑任何属性。 没关系,但不是经过优化且容易出错。 让我们尝试将Prototype模式应用到下面的SmartPhone类中: 我们声明一个带有默认可选参数的克隆 func与属性相同。 该函数通过复制现有实例的所有属性返回一个新实例,然后根据需要修改某些属性。 现在创建5个实例作为波纹管: 我们不再需要通过调用设计的初始化程序来初始化新实例,只需“克隆”当前实例然后对其进行修改! 就这样! 原型模式非常易于理解,也易于通过其他编程语言实现。 当新对象的构造效率低下时,此功能特别有用。 如果您有任何疑问,请留下您的赞赏,感谢您的阅读!

Kendi的李尔设计模式-第1部分创建模式

每个想成为高级开发人员的初级开发人员,都必须从“设计模式”中学习,该模式是Erich Gamma,Richard Helm,Ralph Johnson i John Vlissides的经典著作。 我不得不承认,我从“设计模式”开始并不容易-毕竟,这是一本充实的抽象指南,也是您必须发展的如此抽象的思维方式。 幸运的是,在这个痛苦的过程中,我有一个同伴,我忠诚的黑人拉布拉多·肯迪(Labrador Kendi),每当我开始入睡时都会叫醒我。 我相信“实践能成为大师”,并且您应该始终以自己的语言来表达抽象以真正理解它。 而且,因为值得与他人分享-我们将与Kendi一起分享有关模式的知识。 那么谁愿意,让我们读… 首先-模式到底是什么? 它总是从问题开始,必须解决它。 有人找到优化的解决方案,可以在这种情况下使用。 因此,如果您知道该模式,则无需自己发明。 因此,正确识别问题的类型至关重要。 因此,我们将从案例分析开始讨论每种模式。 案号 1-我们要构建不同类型的复杂对象。 这些目的是一个制造过程的结果。 如何在不复制代码的情况下构建这些对象? 解决方案是使用“构建器”模式,其中复杂的对象创建算法独立于该对象的组件和组件的连接方式,并且构造过程允许创建不同类型的对象。 用例:如果我是狗屋生产的总监(干什么!),我会雇用一名首席建造者来创建狗屋项目。 反过来,这名建筑商会继承其他将完成此项目的建筑商,结果建造了不同类型的狗屋(一间小房子用于贝塞特犬,一间大房子用于拉布拉多犬)。 案号 2-我们希望能够在运行时添加和删除产品。 我们要避免创建与产品类层次结构相对应的工厂类层次结构。 解决方案是使用原型模式。 用例:我们发现狗屋的生产没有回报。 相反,我们购买现成的狗屋。 在订购时,客户会给我们提供首选项,例如“为该颜色绘画”或“在前面添加此标题”。 我们通过将原型克隆与客户的偏好相结合来动态创建新产品。 总结一下: 创建模式有助于保持系统独立于对象创建,组成和表示的方式。 它们封装了系统使用哪些特定类的信息,并隐藏了创建和组成对象的过程。 对复杂对象创建过程的最佳控制是生成器模式。 它会逐步生成产品,并且只有在过程完成后,导演才能从Builder中获取产品。 其他模式只需一步即可创建对象。 工厂方法是一种流行的对象构造函数,当一个类想要将一个任务委托给其他一些辅助类时,该方法特别有用。 工厂方法的缺点是创建了并行的类层次结构(产品类=构造函数类)。 因此,有时最好使用与工厂方法相反的原型模式,该模式通过克隆对象而不是创建新对象来减少类的数量。 此外,原型模式是唯一一种在运行时提供添加和删除产品功能的模式。 本文还没有提到其他设计模式:抽象工厂和单例。