Builder设计模式和Factory设计模式有什么区别?
哪一个更有利,为什么?
如果我想测试和比较/对比这些模式,我如何将我的发现表示为图表?
design-patterns factory-method factory-pattern builder-pattern
工厂和抽象工厂模式之间的基本区别是什么?
我知道有很多关于这两种模式之间差异的帖子,但有一些我找不到的东西.
从我一直在阅读的内容中,我看到工厂方法模式允许您定义如何创建单个具体产品,但是从客户端隐藏实现,因为他们将看到通用产品.我的第一个问题是抽象工厂.它的作用是允许您创建具体对象的族(可能取决于您使用的特定工厂)而不仅仅是单个具体对象?抽象工厂是否只返回一个非常大的对象或许多对象,具体取决于您调用的方法?
我的最后两个问题是关于我在很多地方看到过的单一引言,我无法完全理解:
两者之间的一个区别是,使用抽象工厂模式,类通过组合将对象实例化的责任委托给另一个对象,而工厂方法模式使用继承并依赖子类来处理所需的对象实例化.
我的理解是工厂方法模式有一个Creator接口,它将使ConcreteCreator负责知道要实例化的ConcreteProduct.这是通过使用继承来处理对象实例化的意思吗?
现在关于那个引用,抽象工厂模式究竟是如何通过合成将对象实例化的责任委托给另一个对象?这是什么意思?看起来抽象工厂模式也使用继承来完成构建过程,但是我仍然在学习这些模式.
任何帮助,尤其是最后一个问题,将不胜感激.
design-patterns factory-method factory-pattern abstract-factory
什么时候在对象中使用工厂方法而不是Factory类是个好主意?
任何人都可以解释工厂和战略模式之间的区别吗?
对我来说,除了额外的工厂类(在工厂模式中创建产品对象)之外,两者看起来都相同
java design-patterns strategy-pattern factory-pattern abstract-factory
这似乎是一个问题似乎是一个骗局,但请耐心等待 - 我保证我已经阅读了相关的帖子(以及GOF书).
在我读完所有内容之后,我仍然没有清楚何时使用抽象工厂,工厂方法或构建器.我相信它会在我看到一个问题的简单例子之后陷入困境,这个问题最好由建筑商来处理,而使用抽象工厂显然是愚蠢的.
你能提供一个简单的例子,你可以清楚地使用一种模式而不是其他模式吗?
我理解,如果这个例子过于简单,可能归结为意见问题,但我希望如果有人可以,那个人就是这样.
谢谢.
language-agnostic design-patterns builder factory-method abstract-factory
作为一名初级开发人员,我对某些设计模式有点困惑.有时,我只是不知道在哪个环境中使用哪个.
例如,在创作模式上,我真的不知道何时使用:
实际上,我看到了一些差异; 但我也看到你可以使用多种解决方案,如:
我的意思是,这些创作的结果最终是相同的:你得到你的对象实例.
我只是想知道你会在不同的环境中使用什么样的设计(我想它可能取决于性能需求,对象的复杂性,耦合......)
此外,我没有看到外观和中介之间的巨大差异,除了中介调用不同的接口.
对于责任链,我不明白为什么我看到所有实现使用链式列表.这个模式不能用我们连续调用的简单处理程序列表来实现吗?
这就是为什么我希望人们告诉我你将使用GoF模式的具体情况,以及为什么你不会使用任何其他可能适合给定问题的模式(但可能不那么优雅) ).
谢谢
据我所知,工厂方法是简单工厂,工厂对象是抽象工厂?和:
- 工厂方法(简单工厂):
public class SimplePizzaFactory {
public static final int CHEESE = 1;
public static final int PEPPERONI = 2;
public static final int VEGGIE = 3;
public static Pizza createPizza(int type) {
Pizza pizza = null;
if (type == CHEESE) {
pizza = new CheesePizza();
} else if (type == PEPPERONI ) {
pizza = new PepperoniPizza();
} else if (type == VEGGIE ) {
pizza = new VeggiePizza();
}
return pizza;
}
}
Run Code Online (Sandbox Code Playgroud)
工厂对象(抽象工厂):
?
我对吗?
工厂模式的实现有多少,它们的区别是什么?
这个简单工厂是否违反开放封闭原则?
每次需要创建新的具体产品时,SimpleProductFactory都需要更改,但它遵循单一责任原则,因为这是它永远改变的唯一原因.它的唯一目的是使客户不违反开放的封闭原则,所以我认为它本身不能违反,因为很明显这个代码是需要的.
我对更换工厂不感兴趣,但是这个具体的例子是否违规.
产品
interface Product{
public int getPrice();
}
Run Code Online (Sandbox Code Playgroud)
牛奶
class Milk implements Product{
public int getPrice(){ return 5; }
}
Run Code Online (Sandbox Code Playgroud)
芯片
class Chips implements Product{
public int getPrice(){ return 3; }
}
Run Code Online (Sandbox Code Playgroud)
SimpleProductFactory
class SimpleProductFactory{
public Product createProduct(String productName){
if(productName.equals("milk")){
return new Milk();
}
else if(productName.equals("chips")){
return new Chips();
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
客户
class Client{
public static void main(String[] args) {
SimpleProductFactory productFactory = new SimpleProductFactory();
Product prod = productFactory.createProduct("milk");
System.out.println(prod.getPrice());
}
}
Run Code Online (Sandbox Code Playgroud) 在为Android开发时,我遇到了一个Bitmap类.我觉得很奇怪,这个类没有公共构造函数,而是提供createBitmap具有完全相同目的的静态函数.
从句法上讲,没有任何优势:
Bitmap bm = new Bitmap(10, 10);
Bitmap bm = Bitmap.createBitmap(10, 10);
Run Code Online (Sandbox Code Playgroud)
我已经看到其他类也这样做,其中通常命名等效的静态函数newInstance.这是什么原因?
我是Swift编程的新手,我在构建Factory设计模式方面遇到了阻碍.以下是我的代码:
protocol IInterface {
func InterfaceMethod() -> Void
}
public class SubClass: IInterface {
init() {}
func InterfaceMethod() { }
public func SubClassMethod() { }
}
public class Factory() {
class func createFactory() -> IInterface {
return SubClass()
}
}
Run Code Online (Sandbox Code Playgroud)
最后,我试图像下面这样访问它
let mgr = Factory.createFactory()
//calling Interface Method
mgr.InterfaceMethod() -- This works, when i keep a dot (mgr.) it shows the method name
//calling subclass method
mgr.SubClassMethod() -- This doesn't work, when i keep a dot (mgr.) it doesnt even …Run Code Online (Sandbox Code Playgroud)