聊聊设计模式的工厂方法模式

介绍

工厂设计模式中,有一个中心负责创建类的实例,提供给系统调用,跟现实生活中负责生产产品的工厂是类似的,所以称为工厂类。工厂设计模式分为简单工厂模式,工厂方法模式,和抽象工厂模式。这次说明的是工厂方法模式。

结构

  • 定义一个产品类接口
  • 定义具体的产品类的不同实现
  • 定义一个工厂类接口
  • 定义具体的工厂类实现,每个实现对应上述每个产品的创建

类图结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KvZ0vHd4-1599205734767)(http://note.youdao.com/yws/res/2974/WEBRESOURCE94e1f53af6d38a91bebe76e91462598d)]

代码实现

定义产品类接口

public interface Product {
    void show();
}

定义具体的产品实现类

public class ProductA implements Product{
    @Override
    public void show() {
        System.out.printf("ProductA is showing");
    }
}
public class ProductB implements Product{
    @Override
    public void show() {
        System.out.println("ProductB is showing");
    }
}

定义工厂类接口

public interface Factory {
    Product creatProduct();
}

定义具体的工厂实现类
工厂FactoryA负责创建A产品

public class FactoryA implements Factory{
    @Override
    public Product creatProduct() {
        return new ProductA();
    }
}

工厂FactoryB负责创建B产品

public class FactoryB implements Factory{
    @Override
    public Product creatProduct() {
        return new pattern.factory.ProductB();
    }
}

场景类
这里场景类是通过创建具体的工厂,工厂在创建自己负责的产品,而不是一个工厂来创建多个产品。从而在后续需要新增一个产品时只需要扩展具体的产品类和工厂类,不需要修改原有的工厂类,做到了开闭原则。

public class Client {
    public static void main(String[] args) {
        Factory factoryA = new FactoryA();
        Factory factoryB = new FactoryB();

        Product productA = factoryA.creatProduct();
        Product productB = factoryB.creatProduct();

        productA.show();
        productB.show();
    }
}

优缺点

工厂方法模式符合开闭原则,对修改闭合,对扩展开放,系统架构清晰,工厂的职责清晰。如果需要扩展产品类时,需要同时增加产品实现类和工厂实现类,会增加系统复杂性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值