首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《Effective Java》——读后总结

[1240] 1、静态工厂方法代替构造器 静态工厂方法有名称,能确切地描述正被返回对象。 不必每次调用都创建一个新对象。 可以返回原返回类型任何子类对象。...Builder 模式让类创建和表示分离,使得相同创建过程可以创建不同表示。...3、避免创建不必要对象 对于 String 类型,String s = new String("") 每次执行时都会创建一个新实例,而使用 String s = "" 则不会,因为对于虚拟机而言,包含相同字符串字面常量会重用...6、覆盖 equals 时总是覆盖 hashCode 相等对象必须具有相等散列码,如果没有一起去覆盖 hashcode,则会导致俩个相等对象未必有相等散列码,造成该类无法结合所有基于散列集合一起工作...局部类,在任何可以声明局部变量地方声明局部类,有名字,在非非静态环境中定义才有外部实例,不能包含静态成员,同时必须保持简短。 Java学习交流QQ群:589809992 我们一起学Java!

1.4K10

Unity基础教程系列(八)——更多工厂(Where Shapes Come From)

同样,形状不必由单个对象组成,也可以具有自己对象层次结构,具有多个网格,动画,行为和其他内容。为了说明这一点,我们将通过组合多个默认网格来创建一些复合形状。...1.1 立方体嵌入球 我们先将一个立方体与一个球简单地组合在一起创建一个立方体对象,然后创建一个均位于原点球体。然后使球体成为立方体子级。在默认比例下,球体隐藏在立方体内部。...不能单纯忽略它们,因为这样我们最终会得到随机颜色。我们需要保持一致,因此只需将其余颜色设置为白色即可。 ? 2 第二个工厂 目前,我们使用一个工厂来处理所有形状实例。...(形状来自多个工厂实例) 尽管通过不同工厂创建形状似乎可以正常工作,但它们重用却会出错。所有形状最终都由一家工厂回收了。这是因为Game始终使用相同工厂来回收形状,无论它们在何处生成。...如果不是,则记录错误中止。 ? 2.5 保存原始工厂 保存和加载也需要进行调整以支持多个工厂。我们必须保存每种形状原始工厂,但是无法自己编写工厂资产。

1.3K10
您找到你想要的搜索结果了吗?
是的
没有找到

Unity基础教程系列——对象管理(二)对象多样化(Fabricating Shapes)

本文重点: 1、为形状创建一个工厂 2、保存和加载形状id 3、支持多个材质和随机颜色 4、启用GPU实例化 这是关于对象管理系列第二篇教程。...第二个元素使用球体,第三个元素使用胶囊。 ? (带有各个预制件引用工厂) 1.4 获取形状 要使工厂发挥作用,必须有一种方法可以它获得shape实例。给它一个公共Get方法。...即使我们以后改变了工厂工作方式,我们也必须确保这个标识保持不变,以保持向后兼容。 ? 除了请求一个特定形状之外,我们还可以通过GetRandom方法工厂获得一个随机形状实例。我们可以用随机。...通过使用属性,可以向看似简单检索或赋值添加额外逻辑。在我们示例中,当工厂实例化形状标识符时,必须为每个实例精确设置一次。在那之后再设置它将是错误。...如果我们是较旧保存文件中读取数据,那么只需要获取立方体即可。 ? 3 材质多样性 除了改变衍生对象形状,我们还可以改变它们组成。目前,所有的形状使用相同材质,这是Unity默认材质。

1.7K10

win10 uwp 渲染原理 DirectComposition 渲染 例子创建工程如何写显示CompositionSurfaceBrush

直接渲染例子是使用 Direct2D 和 Direct3D ,而直接通过 Dx api 方式当然需要使用 C++ 和底层 API ,这开发效率比较差。...如果需要高性能画图,通过 win2d 是一个很好方法。大家也知道创建win2d只是显示,不会有交互,如果需要交互需要自己写。虽然写一个交互很简单,但是如果没有使用框架,重复代码很多。...通过这个类可以使用 d2d 来画,在 UWP 简单使用方法是 win2d 所以下面告诉大家如何使用 win2d 来画。 但是 UWP 底层是直接使用d2d没有经过 win2d 封装。...博客WPF 使用 SharpDX 在 D3DImage 显示可以知道,在 WPF 使用 d2d 是比较难,因为很难集合两个在一个界面。但是 UWP 通过这个类就可以把底层渲染放在指定层级。...但是 UWP 可以直接画出,不需要使用 WPF 这样方法。我看来 UWP 在这里是很大提升,这就是我看到很多大神说不在 WPF 添加 win2d底层技术实现是不相同

2.7K10

Effective Java要点笔记

getInstance 约定俗成返回单例 newInstance 约定俗成多例 getType 一般把工厂方法写在其它类(如专门工厂类) 可根据Type入参来工厂拿对应单例 newType 一般把工厂方法写在其它类...再讲单例实现 常见有三种 枚举 静态属性或静态块 双重检查锁 不需要实例类 尽量把构造器私有化,比如一些工具类,避免不必要对象意外创建 对象如果可重用,就少创建点 但是如果因为多创建实例而提高了程序清晰性...,相等对象必须具有相同hashCode值~ 不要将equals声明中Object对象替换为其它类型,应该覆盖Object equals方法 要始终覆盖toString方法,打印信息更加具有可读性...assert断言 我们要保护性去设计程序,如果API设计不好,客户端很容易误解,导致不可预期行为,所以编写面对客户不良行为时仍能保持健壮类,这是非常值得投入时间去做事情。...次选方案是,让高层悄悄绕开异常, 将高层方法调用者与底层问题隔离起来。(底层catch异常打错误日志) 一般而言,失败方法调用应该使对象保持在被调用之前状态 异常要打印关键信息,禁止忽略异常

41310

Java架构师教你写代码(二) - 使用建造者替代多参数构造器

阅读者想知道这些值啥意思,必须清点参数。而长序列相同类型参数也极易导致bug。 如果调用不小心颠倒俩参数,编译器不报错,但程序在运行时会出错。...无法仅通过校验构造器参数有效性来保证一致性。在不一致状态下尝试使用对象可能会导致错误发生,这比包含bug代码还难调试。...此外,它可能在运行时导致错误,因为编译器不能确保程序员在使用对象之前调用它 freeze 方法。...5 优点 建造者模式灵活,一个构建器可被重复使用而构建多个对象。 构建器参数可以在调用build方法创建对象间调整,也可随着不同对象而改变。...因此,最好一开始就从构建器开始 7 总结 在设计构造器或静态工厂类时,有许多参数是可选或具有相同类型时,建造者模式是很好选择。

61110

考虑使用静态工厂方法替代构造方法

这样API用户将永远不会记得那个构造方法是哪个,最终会错误地调用。阅读使用这些构造方法代码的人只有在参考类文档情况下才知道代码作用。...这允许不可变类 (条目 17) 使用预先构建实例,或者在构造时缓存实例反复分配它们以避免创建不必要重复对象。...如果经常请求等价对象,那么它可以极大地提高性能,特别是如果在创建它们非常昂贵情况下。 静态工厂方法从重复调用返回相同对象能力允许类保持在任何时候存在实例严格控制。...不仅是 API 大部分减少了,还包括概念上权重:程序员必须掌握概念数量和难度,才能使用 API。程序员知道返回对象恰好有其接口指定 API,因此不需要为实现类读阅读额外类文档。...服务提供者框架一个可选第四个组件是一个服务提供者接口,它描述了一个生成服务接口实例工厂对象。在没有服务提供者接口情况下,必须对实现进行反射实例化 (条目 65)。

66130

为什么android API 中有很多对象创建都是使用new关键字

比起工厂方法、builder模式,java 中不提倡直接使用构造方法创建对象(new),为什么android API 中还是有很多对象创建使用构造方法 ? 这只是个草稿 首先,谢邀。...第二章《创建和销毁对象》开始,就涉及了“静态工厂方法”,“构造器创建对象”等概念,篇幅不长,但实用性极强,且概括性极强,可谓句句精辟。...静态工厂方法可以有突出名称 我们不能通过给类构造函数定义特殊名称来创建具备指定初始化功能对象,也就是说我们必须通过参数列表来找到合适构造函数,即便文档健全但仍很烦人,而且一旦使用错误构造函数...静态工厂方法在创建参数化类型实例时候,它们使代码变得更加简洁。 在调用参数化构造器时,即使类型参数很明显,也必须指明。...类无法通过检验构造参数有效性来保证一致性。而试图使用处于不一致状态对象,将会导致失败,这种失败与包含错误代码大相径庭,因此调试起来十分困难。

70330

Win2D游戏循环:CanvasAnimatedControl

更新于 2018-11-28 08:25 Win2D 是 DirectX 一个高层封装,提供了极大 DirectX 性能同时,又具有很好用 API 设计。...用 Win2D 除了能做出高性能视觉效果之外,还可以轻而易举地搭建一个游戏循环出来。使用 Win2D 游戏循环,你可以直接做出一个简单游戏出来。...CanvasVirtualControl 适用于在一个很大画面中,只显示一个小部分情况。例如显示大地图一部分,或者显示大量超界笔迹内容。...当需要创建资源时候会引发此事件。 第一次使用时候就需要创建资源;除此之外,如果设备丢失,也需要创建资源。...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

95020

win10 uwp 萤火虫效果 安装 win2d创建界面后台方法核心代码

本文在Nukepayload2指导下,使用思想用C#写出来。 本文告诉大家,如何使用 win2d 做出萤火虫效果。...安装 win2d 安装win2d方法请使用 Nuget 下载方法,参见:win10 uwp win2d ? 下面先让大家看一下效果图再告诉大家如何做 ?...萤火虫 于是开始创建萤火虫代码,在创建之前,需要一个随机类,这个类用于控制萤火虫呼吸和移动,都是随机。 在指定范围之内,随机取一个点,这个点作为目的点。...这里使用 time 是为了在性能比较差电脑得到效果和性能比较好一样,虽然中途有一些没有显示,但是计算结果相同,不会出现性能差电脑,动画速度和性能好电脑不一样。...如何在 win2d 使用图层,主要类是CanvasCommandList用它就可以做出图层,最好使用DrawImage把他弄出来。

68510

Unity基础教程系列(三)——复用对象(Object Pools)

这是通过为形状列表选择一个随机索引使用Destroy方法销毁相应对象来完成。 ? 但这只在当前有形状情况下有效。再很多时候,对象可能还没有创建或加载,或者所有现有的对象都已经被销毁了。...如果没有,则此时创建池。 ? 3.4 池中检索一个对象 实例化形状设置其ID现有代码现在应该只在不回收时使用。否则,应该池中检索实例。要实现这一点,必须在决定如何获取实例之前声明实例变量。...启用回收功能后,我们必须正确池中提取实例。我们可以使用形状ID作为池索引。然后该池中获取一个元素,然后将其激活。这是通过在其游戏对象上调用SetActive方法(以true作为参数)来完成。...你可以使用堆栈代替,但是列表工作很好。 3.5 回收对象使用这些池,工厂必须有一种方法来回收不再需要形状。这可以通过添加带有形状参数公共回收方法来实现。...这有可能导致错误。所以这不是一种万无一失技术,是程序员必须要注意。只有工厂得到形状应该返回到它,而不是显著改变他们。虽然有可能销毁这些形状,但这样就无法回收了。

2.8K10

win10 uwp 录制任意应用屏幕

我猜是显卡拿到渲染图片句柄,然后在win2d渲染只是复制句柄通过 DWM 渲染图层。这个方式渲染速度基本就是跑满,同时占用资源如下图 ?...GraphicsCaptureItem 对象,接下面创建方法拿到 GraphicsCaptureItem 获取界面 在 Direct3D11CaptureFramePool.Create 静态方法可以创建...或 Direct3D11CaptureFramePool 类被回收了,在界面冻结时候看调试工具是否有显示GC如果有,那么就是对象被回收了,解决方法是定义一些字段,将这些变量放在字段 如何调试内存请看...本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:https://blog.lindexi.com ),不得用于商业目的,基于本文修改后作品务必以相同许可发布。

1.7K30

win10 uwp win2d CanvasVirtualControl 与 CanvasAnimatedControl CanvasAnimatedControlCanvas

CanvasVirtualControl 和 CanvasAnimatedControl 频繁重新画不相同,在 CanvasVirtualControl 使用范围是很少刷新 如果满足下面任何条件就建议使用...因为 CanvasVirtualControl 使用位图虚拟化,所以不需要在所有的时候都把位图放在内存中,只有在需要显示地方才是有效,存放在内存,对于不显示地方是不放在内存,不画出来。...那么怎么知道触发显示矩形?实际上args.InvalidatedRegions就是拿到一个 Rect ,通过这个就可以判断需要显示是哪个。...很多时候使用 CanvasVirtualControl 都是和 ScrollViewer 一起使用 <canvas:CanvasVirtualControl Width...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后作品务必以相同许可发布。

54210

ExoPlayer播放音视频使用介绍

要播放一段media,您必须创建一个相应MediaSource,然后将该对象传递给ExoPlayer.prepare。...已注册监听器会收到播放状态更改以及何时发生导致播放失败错误通知。 实现自定义播放控制开发人员应该注册一个监听器,并在播放器状态发生变化时使用它来更新控件。...如果播放失败,应用程序还应该向用户显示适当错误信息。 使用SimpleExoPlayer时,可以在播放器上设置其他监听器。...为了使用ExoPlayer播放DRM保护内容,您应用程序必须实例化播放器时注入DrmSessionManager。ExoPlayerFactory提供了允许这种情况工厂方法。...DrmSessionManager对象负责提供DrmSession实例,该实例为解密提供了MediaCrypto对象确保所需解密密钥可用于正在使用底层DRM模块。

6.1K20

Dapr 长程测试和混沌测试

可以删除某些组件,实现相同结果。另一方面,这个测试设计是有意地执行Dapr所有构建块。 此应用程序中所有组件使用相同存储库和相同编程语言实现,以便快速开发。...该消息使用 UUID 生成器获取随机生成消息 Id 和相关 Id,使用 Dapr PubSub API 以下列格式发布: { "correlationId": "", "messageId...它每分钟唤醒一次,并从 Redis 状态存储中检索所有Key - 不使用 Dapr 状态 API,因为 Dapr 不提供 API另一个 Dapr 应用程序状态存储中查询一系列状态。...如果上述所有故障在现实世界中都不能一起证明是可行,那么 Failure Daemon 可以随机选择上述故障配置子集(例如 5),仅在给定运行中执行这些配置。...消息分析器延迟 消息分析器必须发布自消息创建以来延迟指标。任何消息都不应早于 2 分钟。此指标由消息分析器发出。 Hashtag计数器延迟 Hashtag计数器必须发布自消息创建以来延迟指标。

1.1K20

【精选】面试官:聊下常见设计模式有哪些?

1.常见设计模式 单例模式解决是如何在整个项目中创建唯一对象实例问题,避免重复创建(实例化) 对象,已经有现成实例就用现成。...减少资源浪费(因为创建多个实例,浪费内存, 完全没必要),单件模式保证了每时每刻引用都是同一个实例。最常用地方是数据库连接。 工厂模式 是一种类,它具有为您创建对象某些方法。...工厂模式解决是如何不通过 new建立实例对象方法,您可以使用工厂创建对象,而不直接使用 new。这样,如 果您想要更改所创建对象类型,只需更改该工厂即可。使用工厂所有代码会自动 更改。...策略模式:将一组特定行为和算法封装成类,以适应某些特定上下文环境,用意是 对一组算法封装。动态选择需要算法使用。...必须提供一个访问这个实例公共静态方法(通常为getInstance方法), 而返回唯一实例一个引用 public static function getInstance() { if (

1.1K20

Java面试——框架知识点

简单工厂模式:又叫静态工厂方法模式,spring中BeanFactory就是一个简单工厂模式体现,根据传入一个唯一标识来获得bean对象工厂方法模式:通常有应用程序直接使用new创建对象...,为了将对象创建使用分离,采用工厂模式,即应用程序将对象创建及初始化职责交给工厂对象。...一般情况下,应用程序有自己工厂对象创建bean,如果将应用程序自己工厂对象交给spring管理,那么spring管理就不是bean,而是工厂bean; 单列模式:保证一个类仅有一个实例,并提供一个访问他全局访问点...:最少活跃调用数,相同活跃数随机; ConsistentHash LoadBalance:一致性Hash,相同参数请求总是发到同一提供者。...Jenkins软件使开发人员能够快速找到解决代码库中缺陷,自动进行构建测试。 在开发环境早期阶段, 错误跟踪很容易。 提供大量插件支持。 对代码迭代改进。 构建失败会在集成阶段进行缓存。

61020

Java架构师教你写代码(一) - 使用静态工厂方法替代构造器

这样 API,用户永远无法记住该用哪个构造器,并且最终会错误地调用不合适构造器。不阅读类文档,使用者人根本不知道代码作用。 而静态工厂方法有确切名称,所以没这局限。...2.2 无需在每次调用时创建对象 这使得不可变类使用事先构造好实例,或在构造实例时缓存实例,重复分配以避免创建不必要重复对象。...如果经常请求相同对象,特别是创建对象代价高时,可以极大提高性能。 静态工厂方法在重复调用下返回相同对象,这样类能严格控制存在实例。这样类称为实例受控类。编写实例受控类有几个原因。...减少不仅仅是 API 数量,还有概念上减少:程序员为了使用 API 必须掌握概念数量和难度。程序员知道返回对象是由相关接口精确指定,因此不需阅读额外类文档。...SPF第四个可选组件是服务提供者接口,它描述产生服务接口实例工厂对象。在没有服务提供者接口情况下,必须以反射方式实例化实现。

62510
领券