您的位置:首页 > 其它

设计模式之2--工厂方法模式

2017-05-04 23:19 169 查看
工厂模式学习笔记

之前我们学习了简单工厂模式(静态工厂模式),当具体产品类变多的话,工厂类中就会包含大量的if..else..代码。其次,当增加新的具体产品类的时候,还需要修改工厂类的业务逻辑,违反了“开闭原则”。为了解决这个问题,工厂模式应运而生。

在工厂方法模式中,我们不再提供一个专门的工厂类来构建所有的产品对象,而是针对不同的产品类提供不同的工厂,系统提供一个和产品等级结构对应的工厂等级结构。

工厂方法模式定义:

定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式简称为工厂模式,又可称为虚拟构造器模式或者多态工厂模式。工厂模式是一种类创建性模式。



抽象工厂:

interface Factory {
public Product factoryMethod();
}


具体工厂A:

class ConcreteFactoryA implements Factory {
public Product factoryMethod() {
return new ConcreteProductA();
}
}


具体工厂B:

class ConcreteFactoryB implements Factory {
public Product factorMethod() {
return new ConcreteProductB();
}
}


客户端调用:

class Client {
public static void main(String args[]) {
Factory factory = new ConcreteFactoryA();
Product product;
product = factory.factoryMethod();
}
}


客户端针对抽象工厂进行编程,在具体运行的时候实例化指定的具体工厂类,然后创建不同的产品。

工厂方法模式总结:

1. 优点

用户只需要关心所需要的产品对应工厂。在加入新产品时,无须修改抽象工厂和抽象产品提供的接口,只需要添加一个具体工厂和具体产品就可以了。

2. 缺点

增加产品的时候,需要增加具体产品类和对应的具体工厂类,系统中类的个数成对增加。

适用场景:

客户端不需要知道所需要的对象的类。在工厂方法模式中,具体的产品对象都是由对应的具体的工厂类创建的,客户端针对抽象工厂编程,只需要抽象工厂提供一个创建产品的接口,运行时根据多态性会自动的创建相应的产品。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息