02工厂方法模式

定义

简单工厂模式 不符合开闭原则,添加新的产品时,必须修改工厂类。由此改进 工厂方法模式。

  • 工厂方法模式(Factory Method Pattern)简称工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。
  • 在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

结构

在这里插入图片描述

分析

  1. 工厂方法模式是简单工厂模式的进一步抽象和推广
  2. 工厂方法模式保持了简单工厂模式的优点,并克服了它的缺点
  3. 核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给其子类工厂去完成
  4. 可以允许系统在不修改工厂角色的情况下引进新产品
  5. 增加具体产品–>增加具体工厂,符合“开闭原则”

优点

  1. 工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节
  2. 能够让工厂自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部
  3. 在系统中加入新产品时,完全符合开闭原则

缺点

  1. 系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,会给系统带来一些额外的开销
  2. 增加了系统的抽象性和理解难度

示例代码

package hw1.q2;

public interface Connection {
    void connection();
}
package hw1.q2;

public interface ConnectionFactory {
    Connection produceConnection();
}
package hw1.q2;

public class HTTPConnection implements Connection{

    @Override
    public void connection() {
        System.out.println("HTTPConnection的connection方法");
    }
}
package hw1.q2;

public class HTTPConnectionFactory implements ConnectionFactory {

    @Override
    public Connection produceConnection() {
        System.out.println("正在创建HTTPConnection");
        return new HTTPConnection();
    }
}
package hw1.q2;

public class IMAPConnection implements Connection{

    @Override
    public void connection() {
        System.out.println("IMAPConnection的connection方法");
    }
}
package hw1.q2;

public class IMAPConnectionFactory implements ConnectionFactory {

    @Override
    public Connection produceConnection() {
        System.out.println("正在创建IMAPConnection");
        return new IMAPConnection();
    }
}
package hw1.q2;

public class POP3Connection implements Connection{
    @Override
    public void connection() {
        System.out.println("POP3Connection的connection方法");
    }
}
package hw1.q2;

public class POP3ConnectionFactory implements ConnectionFactory {

    @Override
    public Connection produceConnection() {
        System.out.println("正在创建POP3Connection");
        return new POP3Connection();
    }
}
package hw1.q2;

public class Client {

    public static void main(String[] args) {
        HTTPConnectionFactory hcf = new HTTPConnectionFactory();
        HTTPConnection httpConnection = (HTTPConnection)hcf.produceConnection();
        httpConnection.connection();
    }
}

增加POP3时,无需修改源代码,符合开闭原则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值