学习Scala的定义工厂对象
你现在有了布局元素的类层级。这个层级可以“依原件”展现给你的客户。但是你或许还是选择把层 级隐藏在工厂对象之后。工厂对象包含了构建其它对象的
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
。客户与实惠使用这些工厂方法实现对象 的构造而不是直接使用new构造对象。这种方式的一个好处是对象的创建可以被集中化并且对象实际代
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
类的细节可以被隐藏。这种隐藏一方面简化客户理解你的库,因为更少的细节被暴露出来,另一方面提 供给你更多机会在之后改变库的实现而不会破坏客户代码。 为布局元素构建工厂的第一任务是选择工厂方法应该放在哪儿。它们应该是单例对象成员还是类成员 ,包含它们的对象或类应该怎么调用,这里有许多可能性。最直接的
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
是创建类Element的伴生对象并 把它做成布局元素的工厂方法。对于这种方式,你唯一要暴露给客户的就是Element的类/对象组合,隐 藏它的三个实现类ArrayElement,LineElement和UniformElement。
代码10.10是遵循了这个方案的
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
。Element伴生对象包含了三个重载的elem方法变体。每一个变体 构建一种不同的布局对象。
object Element {
def elem(contents: Array[String]): Element = new ArrayElement(contents)
def elem(chr: Char, width: Int, height: Int): Element = new UniformElement(chr, width, height)
def elem(line: String): Element =
new LineElement(line)
}
代码 10.10 带有工厂方法的工厂对象
这些工厂方法使得改变类Element的实现通过使用elem工厂方法实现而不用显式地创建新的 ArrayElement实例成为可能。为了不使用单例对象的名称,Element,认证而调用工厂方法,我们将在源 文件顶上引用Element.elem。换句话说,代之以在Element类内部使用Element.elem调用工厂方法,我们 将引用Element.elem,这样我们只要使用它们的简化名,elem,就可以调用工厂方法。代码10.11展示了 类Element在这些改变之后的样子。
import Element.elem
abstract class Element {
def contents: Array[String]
def width: Int =
if (height == 0) 0 else contents(0).length def height: Int = contents.length
def above(that: Element): Element =
elem(this.contents ++ that.contents)
def beside(that: Element): Element =
elem(
for (
(line1, line2) < - this.contents zip that.contents ) yield line1 + line2
)
override def toString = contents mkString "\n"
}
代码 10.11 重构以使用工厂方法的类Element