设计模式 + UML(一)

发布时间:2019-11-19 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了设计模式 + UML(一)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

本文介绍5种常见创建型设计模式(Creational Patterns)以及对应UML。同时,本文转载了Java和Python的代码实现。值得注意的是,Java是静态语言(强类型语言),变量必须声明数据类型;而Python是动态语言(弱类型语言),变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。因此,在design pattern代码实现上,会有显著差别。(有些动态语言,比如Python,已经把设计模式做成了语言特性???)

为何大量设计模式在动态语言中不适用? - 知乎
https://www.zhihu.com/questio...

UML绘制工具:ProcessOn
GIT Book设计模式Java版

工厂方法(Factory Method)

定义一个用于创建对象(PRoduct)接口(Factory),让子类(concreteFactory)决定将哪一个类(ConcreteProduct)实例化

设计模式 + UML(一)

代码实现:JavaPython
(注:Python代码充分利用了dict数据结构的特性,所以,代码上与Java略有不同)

抽象工厂(Abstract Factory)

工厂方法模式存在着一个问题,该模式中的每个工厂都只生产一种产品,势必导致大量工厂的存在。由此,我们需要考虑将同一类产品组成“产品族”,用同一个工厂来统一生产,即抽象工厂。

抽象工厂使一个工厂能生产多个产品。抽象工厂是所有具体工厂的抽象。

设计模式 + UML(一)

画完这个UML图,所以我感觉抽象工厂模式,其实就是让工厂多加几个工厂方法,来生产多个产品???

可以发现抽象工厂是有缺陷,批量增加工厂来生产不同产品族(即,一个 (ProductA, productB) 元组)是方便的,但是要改变产品结构,即增加 ProductC 就必须修改抽象工厂。

最后,感谢知友ichennan对工厂模式的终极总结:

抽象工厂模式和工厂模式的区别? - 名姓的回答 - 知乎
https://www.zhihu.com/questio...

代码实现:JavaPython

单例模式(Singleton)

只允许类的对象被实例化一次。通常用于全局变量。单例模式创建的对象,可以用作共享信息的存放

单例模式有三个要点:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

进一步地,为避免多线程环境下,多个线程同时调用getInstance方法创建实例,引入 饿汉式单例类懒汉式单例类 两种解决办法。前者,在定义静态变量的时候就实例化单例类,因此在类加载的时候就已经创建了单例对象;后者,使用关键字synchronized来避免多线程同时调用getInstance方法。两种模式各自存在缺点,终极解决办法是:Initialization-on-demand Holder(idiom),由Java虚拟机来保证线程安全性。

设计模式 + UML(一)

脚本宝典总结

以上是脚本宝典为你收集整理的设计模式 + UML(一)全部内容,希望文章能够帮你解决设计模式 + UML(一)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。