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

工厂模式学习笔记

之前我们学习了简单工厂模式(静态工厂模式),当具体产品类变多的话,工厂类中就会包含大量的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. 缺点
增加产品的时候,需要增加具体产品类和对应的具体工厂类,系统中类的个数成对增加。

适用场景:
客户端不需要知道所需要的对象的类。在工厂方法模式中,具体的产品对象都是由对应的具体的工厂类创建的,客户端针对抽象工厂编程,只需要抽象工厂提供一个创建产品的接口,运行时根据多态性会自动的创建相应的产品。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值