关于java:抽象工厂设计模式使用

Abstract Factory Design Pattern use

我正在尝试学习创造性的设计模式,我想我现在已经了解了工厂方法模式。但在转向抽象工厂模式时,我找不到它的用途。我知道我很怀念这件事,但不知道在哪里。

在抽象工厂模式中,我们将有一个抽象工厂,具体工厂将返回实例。假设我们要处理的是创造汽车。我们会有一个抽象的工厂

1
2
3
public interface CarFactory{
    public Car getCar();
}

我们的混凝土工厂

1
2
3
4
5
6
7
8
9
10
11
public class AudiFactory{
    public Car getCar(){
        return new Audi();
    }
}

public class VolvoFactory{
    public Car getCar(){
        return new Volvo();
    }
}

在用户类中,我们将使用它

1
2
3
4
CarFactory factory = new AudiFactory();
Car carAudi = factory.getCar();
factory = new VolvoFactory();
Car carVolvo = factory.getCar();

我认为我们也可以使用工厂模式构建相同的功能

1
2
3
4
5
6
7
8
9
public class CarFactory{

    public Car getCar(String make){
    if("Audi".equals(make))
        return new Audi();
    else if("Volvo".equals(make))
        return new Volvo();
    }
}

在用户类中我们可以

1
2
3
CarFactory factory = new CarFactory();
Car carAudi = factory.getCar("Audi");
Car carVolvo = factory.getCar("Volvo");

如果我的理解是正确的(如果是错误的请纠正我),为什么我们需要另一个设计模式?


你的例子,是的你是正确的工厂模式抽象工厂模式的CAN replace。

摘要厂理解当你需要创建不同的产品不一样的家庭(或家庭actully知道奥迪沃尔沃)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
interface Car {}
interface Engine {}
interface Gear {}

interface ICarFactory {
    Car createCar();
    Engine createEngine();
    Gear createGear();
}

class AudiCar implements Car {}
class AudiEngine implements Engine {}
class AudiGear implements Gear {}

class AudiFactory implements ICarFactory {
    public Car createCar() { return new AudiCar(); }
    public Engine createEngine() { return new AudiEngine(); }
    public Gear createGear() { return new AudiGear(); }
}

我相信同样的事情,你可以形象的沃尔沃。

现在我们有一个类,认为这并不是一Car建立护理无论是奥迪和沃尔沃。

1
2
3
4
5
6
7
8
9
10
class CarBuilder {
    public static Car buildCar(ICarFactory factory) {
        Car car = factory.createCar();

        car.setEngine(factory.createEngine());
        car.setGear(factory.createGear());

        return car;
    }
}

现在我们不知道在工作舱的CAN Builder生成器类品牌,这使得实际的开/闭协调原则。如果有一个品牌在未来的三年我们的生成器可以生成类要安静,车不需要改变单一的代码行。但它是一个封闭的延伸变化的抽象工厂。


在你的例子:

  • 工厂方法模式是模式的创建(隐藏车车执行创作)

  • 抽象工厂模式是模式的创建(创建汽车厂汽车厂,汽车厂需要创作的,创作中心)

  • 所以你认为:抽象工厂模式是一个模式创建厂)厂

  • 论文的目的是研究两个不同的模式。

抽象工厂模式(实现使用的接口/摘要)+ IOC模式>帮助你决定什么类型的车厂在使用时需要在运行时编译(工厂方法模式是一个非常方便的要求)


你有很好的理解使用工厂模式:A厂允许创建对象的头信息的类型是在编译时(只是一个未知的界面收藏指正),科西嘉岛)。现在,以超越的:

现在你有一个CarCarFactory创建对象。我想你,当你需要知识管理的几个工厂,同时在你的计划吗?

这是在工厂当摘要:摘要厂是一个工厂(工厂,工厂允许你创建在编译时类型信息是未知的:那么,你想有一个

1
2
3
4
public interface AbstractCarFactory
{
    public CarFactory getCarFactory(String area);
}

……你将能够实施europeancarfactory,americancarfactory等。

另一个例子是有用的时候在工厂是当你有一些抽象工厂类的构造函数有参数:ITS

1
2
3
4
public CarFactory
{
    public CarFactory(boolean cheatingMotor) {...}
}

它是很难创建动态对象通过一carfactory instantiation(Class.forName("CarFactory").newInstance()),这样一个水平:是有用的在阐明€摘要厂是如何决定的carfactory:instantiate

1
2
3
4
5
6
7
8
9
10
11
12
public interface AbstractCarFactory
{
    public CarFactory(boolean cheatingMotor);
}

public class MyAbstractCarFactory implements AbstractFactory
{
    public CarFactory(boolean cheatingMotor)
    {
        return new CarFactory(true);
    }
}

注:在普通应用,抽象工厂模式的参数化是足以在所有应用程序的行为。我从来没有已知的实例(在工厂)工厂)工厂是必要的。


想java.sql.connection对象我在它的抽象工厂

它包含的声明,callablestatement等你

它可以在oraclestatement或mysqlstatement

你的客户端代码是干净的,它如何在护理和它的轨道地形数据库服务器套接字。

所以湖设计模式:抽象工厂和工厂方法

关于你的原代码

想想是不是真实的世界,通用汽车,丰田"制造工厂"或一些通用汽车厂)

28.什么是你要摆脱IF-ELSE想学习设计模式的一个简单的列表,应摆脱IF-ELSE R代码在你

如果太阳有一个有限的一套数据库处理,他们可以写一些if else

事实是

1)用SQL驱动程序不是由太阳2)这一"注"模式,你可以在任何驱动程序代码,没有担心的是它对知识的内容,简单的接口

"奥迪"护照,问客户你可以呼叫是不合理的