前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

创建

作者头像
超级大猪
发布2019-11-22 14:50:10
5630
发布2019-11-22 14:50:10
举报
文章被收录于专栏:大猪的笔记

导航

在本章中,分别提出了6个建议。 1.用creation method代替构造函数 2.把创建知识搬移到factory中 3.用factory封装类 4.用factory method引入多态创建 5.用build封装composite 6.内联singleton

用creation method代替构造函数

因为在java中,构造函数和类名相同。而且还能多态。 构造函数过多,则需要用参数进行区分不同的功能。这种方式会让人迷惑。 用一个简单的static函数包装下原本的构造函数,能极大的消除创建迷惑。真是太棒了。

把创建知识搬移到factory中

创建漫延指,创建一个对象的代码和数据重复出现在了多个地方。此时管理起来就不方便了。 简单的factory把创建对象的过程和数据封装在了一个类对象中。此时,客户端都唯一与这个factory通信。降低耦合。 最重要的是,factory应包含创建过程中不需要客户端操心的数据。这才符合工厂模式的精髓。客户只管付钱,而不是提供原材料。 通常,简单工厂就能满足需要,但如果工厂中有太多的switch,可以考虑将工厂升级为抽象工厂。 factory容易被滥用,因为factory仅仅是一组creation method的集合。当能用new解决问题之时,不要轻易重构为factory。

用factory封装类

有时,可以把构造函数设为私有。这其实是强推factory的一种方式。客户端就没有办法随意的new实例了。

用factory method引入多态创建

所谓factory method,就是创建实例的函数。比如createXX之类的。它最强大的地方在于可以创建不同类型的实例。这一点与creation method不同。

通常情况下,一个factory method是一个抽象函数,具体实现在子类实现。它通常和模版模式一起使用。 具体上,长这样:

代码语言:javascript
复制
template:
class BaseDo(object):
    def run():
        builder = create_builder()
        # do sth to builder

class Do1(BaseDo):
    def create_builder():
        # do sth
        return builder

task = Do1()
task.run()

run 的实现从各子类被解耦,因为它的唯一不同在于builder。

用build封装composite

有时,一个composite的实现不是那么的可爱。比如系统自带的高度抽象的xml包。 此时,可以在它的上面再加一层封装。即用builder代码来替换原生代码。 将抽象的add, .parent方法替换成具体的addChild,使用户在调用时关注于实现而不是细节。

内联Singleton

所有的全局变量,在未证明无害时,都是有害。 当一个单例,仅在一个类中调用。那就没有必要保留全局的入口。这个建议实质是消除全局变量。 具体的方法,内部类,protect修饰符千奇百怪的解决方案。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导航
  • 用creation method代替构造函数
  • 把创建知识搬移到factory中
  • 用factory封装类
  • 用factory method引入多态创建
  • 用build封装composite
  • 内联Singleton
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档