当前位置:  开发笔记 > 编程语言 > 正文

工厂和战略模式有什么区别?

如何解决《工厂和战略模式有什么区别?》经验,为你挑选了6个好方法。

任何人都可以解释工厂和战略模式之间的区别吗?

对我来说,除了额外的工厂类(在工厂模式中创建产品对象)之外,两者看起来都相同



1> tvanfosson..:

工厂模式是一种创造模式.策略模式是一种操作模式.换句话说,工厂模式用于创建特定类型的对象.策略模式用于以特定方式执行操作(或操作集).在经典示例中,工厂可能会创建不同类型的动物:狗,猫,虎,而策略模式将执行特定操作,例如,移动; 使用Run,Walk或Lope策略.

实际上这两者可以一起使用.例如,您可能有一个用于创建业务对象的工厂.它可以使用基于持久性介质的不同策略.如果您的数据以XML格式存储在本地,那么它将使用一种策略.如果数据在另一个数据库中是远程的,那么它将使用另一个数据库.



2> jlembke..:

策略模式允许您以多态方式更改类的行为.

工厂模式允许您封装对象创建.

加里非常重视.如果您使用编码原理而不是"具体化",那么很多模式开始看起来像主题的变化.



3> Gary Kephart..:

只是为了补充tvanfosson所说的,很多模式看起来和实现一样.也就是说,你可以创建一个接口,在你的代码中可能没有一个接口,然后创建一组该接口的实现.不同之处在于它们的用途以及它们的使用方式.



4> OscarRyz..:

工厂(方法)模式.

仅创建具体实例.不同的参数可能会导致不同的对象.这取决于逻辑等.

战略模式.

封装算法(步骤)以执行操作.因此,您可以更改策略并使用其他算法.

虽然两者看起来非常相似,但目的却相当不同,一个目的是创造另一个是执行一个动作.

所以.如果您的Factory方法已修复,您可能会这样:

 public Command getCommand( int operatingSystem ) { 
      switch( operatingSystem ) { 
           case UNIX    :
           case LINUX   : return new UnixCommand();
           case WINDOWS : return new WindowsCommand();
           case OSX     : return new OSXCommand();
       }
  }

但假设您的工厂需要更高级或动态创建.您可以向工厂方法添加策略并在不必重新编译的情况下对其进行更改,策略可能会在运行时更改.


正是在这种情况下,它产生了一种策略模式,但它在语义上与它不同,因为它用于OBJECT CREATION而不是操作.所以,基本上你使用不同的策略创建对象.

5> interboy..:

首先,必须在简单工厂和抽象工厂之间做出区别.第一个是一个简单的工厂,你只有一个类作为创建对象的工厂,而后者则连接到工厂接口(定义方法名称),然后调用实现此接口的不同工厂.应该根据某些标准对同一方法进行不同的实现.例如,我们有一个ButtonCreationFactory接口,它由两个工厂实现,第一个是WindowsButtonCreationFactory(创建具有Windows外观的按钮),第二个是LinuxButtonCreationFactory(创建具有Linux外观的按钮).所以这两个工厂都有相同的创建方法和不同的实现(算法).您可以根据所需的按钮类型在运行时引用它.

例如,如果您想要具有Linux外观的按钮:

ButtonCreationFactory myFactory = new LinuxButtonCreationFactory();
Button button1 = myFactory.createButton(...);

或者如果你想要Windows按钮

ButtonCreationFactory myFactory = new WindowsButtonCreationFactory();
Button button1 = myFactory.createButton(...);

正是在这种情况下,它产生了一种策略模式,因为它区分了进行某些创建的算法.但是,它与语义不同,因为它用于OBJECT CREATION而不是操作算法.因此,基本上使用抽象工厂,您可以使用不同的策略创建对象,这使得它与策略模式非常相似.然而,AbstractFactory是创造性的,而战略模式是可操作的.实施明智,他们的结果是一样的.



6> Ravindra bab..:

工厂(和工厂返回的FactoryMethod):

    创作模式

    基于继承

    Factory返回Factory Method(接口),然后返回Concrete Object

    您可以将新的Concrete Objects替换为接口,而客户端(调用者)不应该知道所有具体实现

    客户端始终只访问接口,您可以在Factory方法中隐藏对象创建详细信息

看看这篇维基百科文章和javarevisited文章

策略模式:

    这是一种行为模式

    它基于授权

    它通过修改方法行为来改变对象的内容

    它用于在算法族之间切换

    它在运行时更改对象的行为

例:

您可以为特定项目(AirFare票证或ShoppingCart项目)配置折扣策略.在此示例中,您将在7月至12月期间为物品提供25%的折扣,在Jaunary - 6月期间为物品提供无折扣.

相关文章:

战略模式的现实世界范例

设计模式:工厂与工厂方法与抽象工厂

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有