您好,登录后才能下订单哦!
这篇文章主要讲解了“web创建型模式的相关知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web创建型模式的相关知识点有哪些”吧!
创建型模式的讨论
考虑在Prototype模式中描述的绘图编辑器框架。可以有多种方法通过产品类来参数化GraphicTool:
这里考虑的是通过一个选择板为系统添加图形要素的场景。
• 使用Factory Method模式,将为选择板中的每个Graphic的子类创建一个GraphicTool的子类。GraphicTool将有一个NewGraphic操作,每个GraphicTool的子类都会重定义它。
按照原型模式章节中的解释,GraphicTool类还要另外具有其他的功能,例如图形移动,旋转的功能。这里说的应该是在此基础上另外构建一个GraphicTool的子类。
• 使用Abstract Factory模式,将有一个GraphicsFactory类层次对应于每个Graphic的子类。在这种情况每个工厂仅创建一个产品:CircleFactory将创建Circle,LineFactory将创建Line,等等。GraphicTool将以创建合适种类Graphic的工厂作为参数。
这里所说的方式是每个工厂构建一个产品的场景。在实际的开发中,也可以为构建产品的工厂方法增加参数,这种方式可以有效减少工厂或者工厂方法的数量。
• 使用Prototype模式,每个Graphic的子类将实现Clone操作,并且Graphi cTool将以它所创建的Graphic的原型作为参数。
这是《设计模式》书中选择的方式。
究竟哪一种模式最好取决于诸多因素。在我们的绘图编辑器框架中,第一眼看来,FactoryMethod模式使用是最简单的。它易于定义一个新的GraphicTool的子类,并且仅当选择板被定义了的时候,GraphicTool的实例才被创建。它的主要缺点在于GraphicTool子类数目的激增,并且它们都没有做很多事情。
工厂方法应该是作为一个副业,为现有类增加构建关联产品的方法使之成为一个宿主类,但是实际使用中经常会出现这种情况:构建新的子类只是为了增加新产品。这就有点过了。
Abstract Factory并没有很大的改进,因为它需要一个同样庞大的Graphics Factory类层次。只有当早已存在一个GraphicsFactory类层次时,Abstract Factory才比Factory Method更好一点—或是因为编译器自动提供(像在Smalltalk或是Objective C中)或是因为系统的其他部分需要这个Gr aphicsFactory类层次。
某种角度来讲,抽象工厂只是将工厂方法从宿主类中独立出来的新类,所以也会具有工厂方法模式类似的问题。
总的来说,Prototype模式对绘图编辑器框架可能是最好的,因为它仅需要为每个Graphics类实现一个Clone操作。这就减少了类的数目,并且Clone可以用于其他目的而不仅仅是纯粹的实例化(例如,一个Duplicate菜单操作)。
这句化换个说法就是对于原型模式的场景来说,原型模式是最合适的。这是当然的事情,要不然原型模式也不会选择这个场景对吧。在实际的开发中用到原型模式的时候无法回避的是需要解决原型从哪里来的问题。
Factory Method使一个设计可以定制且只略微有一些复杂。其他设计模式需要新的类,而Factory Method只需要一个新的操作。人们通常将Factory Method作为一种标准的创建对象的方法。但是当被实例化的类根本不发生变化或当实例化出现在子类可以很容易重定义的操作中(比如在初始化操作中)时,这就并不必要了。
如果需要将构建产品的代码分离出来,工厂方法可以作为第一步的选择。如果不需要改变实例化的类型,或者该类型变化可以和动作的多态同步,也就没有必要将构建产品的部分独立出来了。
使用Abstract Factory、Prototype或Builder的设计甚至比使用Factory Method的那些设计更灵活,但它们也更加复杂。通常,设计以使用Factory Method开始,并且当设计者发现需要更大的灵活性时,设计便会向其他创建型模式演化。当你在设计标准之间进行权衡的时候,了解多个模式可以给你提供更多的选择余地。
更独立的类意味着更大的灵活性,但同时也意味着更复杂的设计。这是考验的是设计者选择的能力,平衡的感觉。当然了作为选择和平衡的前提,你得先知道有哪些可有的设计模式。
感谢各位的阅读,以上就是“web创建型模式的相关知识点有哪些”的内容了,经过本文的学习后,相信大家对web创建型模式的相关知识点有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。