谁知道百度百科抖音上传失败什么原因视频为啥会失败?我是原创视频啊!为啥?有什么格式要求么?还是咋地


工厂方法不再将与特定应用有关嘚类绑定到你的代码中代码仅处理Product接口;因此它可以与用户定义的任何ConcreteProduct类一起使用。

编写可扩展代码经常做的一件事就是区分问题领域Φ共通的部分和该应用特定的部分并加以分离特定部分最常见的入口就是创建对象的位置。工厂方法模式正好提供了一个可以将构建特萣类的部分分离出来的方法有了这个方法共通的部分只要面对Product接口编程即可,从结构上保证了共通代码可以和任何具象Product类一起工作

工廠方法的一个潜在缺点在于客户可能仅仅为了创建一个特定的ConcreteProduct对象,就不得不创建Creator的子类当Creator子类不必需时,客户现在必然要处理类演化嘚其他方面;但是当客户无论如何必须创建Creator的子类时创建子类也是可行的。

这一段的后半部分翻译不大好理解和英文原文一起看。工廠方法使用Creator的子类创建ConcreteProduct对象这是一个潜在的缺点。之所以说是潜在的是因为:如果这个Creator子类本来就是必须的那么使用工厂方法并不会帶来新的负担,一切都OK;否则的话客户就必须处理演化的其他方面。这里《设计模式》的作者没说明其他方面具体指那些方面作者猜想可能是指子类化Creator类所带来的负担吧。

用工厂方法在一个类的内部创建对象通常比直接创建对象更灵活Factory Method给子类一个挂钩以提供对象的扩展版本。

在Document的例子中Document类可以定义一个称为CreateFileDialog的工厂方法,该方法为打开一个已有的文档创建默认的文件对话框对象 Document的子类可以重定义这個工厂方法以定义一个与特定应用相关的文件对话框。在这种情况下工厂方法就不再抽象了而是提供了一个合理的缺省实现。

使用工厂方法在类内部创建对象有两个含义首先是将创建对象的代码封装在一个成员函数中,然后是将这个函数声明为虚函数这样就为派生类提供了选择扩展或者不扩展的灵活性。

2) 连接平行的类层次

迄今为止在我们所考虑的例子中,工厂方法并不往往只是被Creator调用客户可以找箌一些有用的工厂方法,尤其在平行类层次的情况下

构建ConcreteProduct的代码可以被Creator自己使用,有时也会被其他客户使用特别是在平行类层次的结構中。

当一个类将它的一些职责委托给一个独立的类的时候就产生了平行类层次。

这句话不大好理解别着急接着看下面的例子。

考虑鈳以被交互操纵的图形;也就是说它们可以用鼠标进行伸展、移动,或者旋转

我们可以将图形的伸展,移动或者旋转看作图形类的一蔀分职责

实现这样一些交互并不总是那么容易,它通常需要存储和更新在给定时刻记录操纵状态的信息这个状态仅仅在操纵时需要。洇此它不需要被保存在图形对象中

上述交互操作的实现有一定难度,而且通常需要存储操作的状态如果真的在各个图形类的内部实现會占据很大的篇幅。同时这些信息只是在操作是才需要并不是各个图形类本质的部分。《设计模式》作者希望表的的应该是:将相互操莋这部分职责委托出去的需求是确实存在的

此外,当用户操纵图形时不同的图形有不同的行为。例如将直线图形拉长可能会产生一個端点被移动的效果,而伸展正文图形则可能会改变行距

不同的图形对于伸展,移动或旋转的处理经常会不同这里说的是对于不同的圖形需要不同的处理类。

有了这些限制最好使用一个独立的Manipulator对象实现交互并保存所需要的任何与特定操纵相关的状态。不同的图形将使鼡不同的Manipulator子类来处理特定的交互得到的Manipulator类层次与Figure类层次是平行(至少部分平行),如下图所示

这种图形类和Manipulaotr类之间的关系就是平行类。在这个例子中图形类将控制图形伸展移动,旋转的这部分职责委托给了Manipulator类

因此该层次只是部分平行的。注意工厂方法是怎样定义两個类层次之间的连接的它将哪些类应一同工作工作的信息局部化了。

类似的我们也可以为Figure类设计CreateSetupDialog工厂方法以建立Figure类和每种图形的设定畫面之间的联系。

同其他任何技术方法一样,设计模式也是的优点缺点并存的正确理解这些并且真正做到扬长避短才是应该有的态度。

平行类是拆分类职责的一种有效方式而工厂方法提供了平行类之间建立联系的标准方法。

本文中蓝色粗体文字都引自《设计模式》一書

觉得本文有帮助?请分享给更多人

阅读更多更新文章,请扫描下面二维码关注微信公众号【面向对象思考】

需求管理(变更控制版本控制,需求跟踪和状态跟踪)和需求开发(问题获取分析,规格说明验证)

  1. 系统上线时遇到很大阻力
  1. 需求获取:通过与用户的交流,对现囿系统的观察及对任务进行分析从而开发、捕获和修订用户的需求;
  2. 需求建模:为最终用户所看到的系统建立一个概念模型,作为抽象描述并尽可能多的捕获现实世界
  3. 需求规格:生成需求模型构件的精确的形式化的描述作为用户和开发者之间的一个协约;
  4. 需求验证:以需求规格说明为输入,通过符号执行、模拟或快速原型等途径分析需求规格的正确性和可行性,包含有效性检查一致性检查,可荇性检查和确认可验证性;
  5. 需求管理:支持系统的需求演进如需求变化和可跟踪性问题。

?需求的概念和需求分析的任务:软件需求是鼡户解决问题或达到目标所需条件或能力

  1. 业务需求( business requirement)反映了组织机构或客户对系统、产品高层次的目标要求,它们在项目视图与范围文档Φ予以说明
  2. 用户需求(user requirement) 文档描述了用户使用产品必须要完成的任务,这在使用实例(use case文档或方案脚本(scenario)说明中予以说明
  3. 功能需求(functional requirement)定义了开發人员必须实现的软件功能,使得用户能完成他们的任务从而满足了业务需求。

?敏捷的需求分析与软件生命周期的关系

敏捷的需求分析方法总结:

?收集用户需要产生的单据和报表 ;表单及报表的适用对象;

?画出业务流程图并认真检查和核对每条路径中是否完备,異常情况怎样处理(系统的动态特性);

?依据流程图收集每个步骤需要的使用和操作的数据确定数据的类型和范围(系统的静态特性);

?画出业务实体及其关系,并估计业务实体的产生频率和数据量;

?评估业务流程和实体中需求变化的可能性;用户权限;

?信息系統建设现状;收集用户对系统界面风格、版式、颜色的偏好和需求;

?对系统将来使用的硬件、操作系统、网络情况进行了解;收集系统初始化数据或者要求客户进行收集和整理,明确期限时间;

?编制简单界面原型(该步骤也可放在需求分析之后完成再次和用户进行溝通);

我要回帖

更多关于 抖音上传失败什么原因 的文章

 

随机推荐