很多人说他们在他们的项目中使用工厂模式。但是当我真正看到他们的实现时,它看起来完全不同 根据定义,我在第一本书中读到了什么。在书中,他们描述了两种工厂模式,即
Factory Method:- A class specifies its sub-classes to specify which objects to create based on some parameter. So we expect here some abstract method in base class whihich will be implemented by child class and pupose of that will be to create some object
Abstract Factory:- Provides an factory (in form of interface or abstract factory)for creating families of related or dependent objects without specifying their concrete classes.
我有一个问题,他们所说的家属或亲属是什么意思
对象。 让我们引用 http://www.apwebco.com/gofpatterns/creational/AbstractFactory.html .根据我的理解,这意味着在 FinancialToolsFactory(在链接中)能够创建 TaxProcessor,这是一个产品系列,其中实际创建的产品是 CanadaTaxProcessor 和 EuropeTaxProcessor 。所以这里我们将有 n 个具体工厂(在本例中为 CanadaFinancialToolsFactory 和 EuropeFinancialToolsFactory),在本例中它们将扩展/实现抽象工厂FinancialToolsFactory。
请告诉我以上理解是否正确,因为我认为这是工厂模式的关键。
第二个问题:
人们以工厂模式的名义所做的事情如下:
public class MyFactory
{
public static <T> T getObject(Class<T> cls)
{
if (cls == null)
{
throw new IllegalArgumentException("Invalid className");
}
T daoObject = (T)map.get(cls);
if (daoObject == null)
{
daoObject = loadObject(cls);
}
return daoObject;
}
}
它们只是从 main 方法中传递类似 Example.class 的类,并获取该特定类的对象实例。 现在,如果我们按照开头(从第一本书开始)和其他网站描述的工厂模式的实际概念来看,它不遵循这两种工厂模式中的任何一种。对我来说,它看起来像是一个实用程序类,我们在其中传递类并获取对象实例。 如果你们同意这一点,请告诉我?
最佳答案
您对工厂方法和抽象工厂模式的理解是正确的。
当人们创建仅负责创建其他对象的类时,他们自然倾向于将其命名为 Factory。这本身并不是没有道理的。问题是没有工厂模式。
这里出现混淆有两个原因:
一些开发人员只是想引入另一种模式并声称他们正在使用“工厂模式”,指的是创建其他对象的对象
学习设计模式的开发人员看到一个类称为工厂,无论是否实现了模式,并假设它必须是工厂方法或抽象工厂。这很令人困惑,因为您随后试图找出它是哪一个,从而质疑您自己对真实模式的理解。
请记住,设计模式不仅是常见问题的解决方案,而且还有助于建立讨论设计的语言。在这种情况下,您期望的设计语言并不是开发人员实际使用的。只有当他们说他们正在使用特定的设计模式时,他们所做的才是错误的。
关于java - 关于工厂模式的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7205999/
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
在railstutorial中,作者为什么选择使用这个(代码list10.25):http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-usersnamespace:dbdodesc"Filldatabasewithsampledata"task:populate=>:environmentdoRake::Task['db:reset'].invokeUser.create!(:name=>"ExampleUser",:email=>"example@railstutorial.org",:passwo
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub