简单工厂模式

简单工厂模式概述

简单工厂模式并不属于23个经典设计模式之一,但是通常将简单工厂模式作为学习其他工厂模式的基础。

应用场景

当需要大量创建同属于一类的不同对象时,我们可以应用简单工厂模式。

概念

工厂类:根据不同的参数用于创建具体产品对象的类。
具体产品类:实际的产品类。
抽象产品类:产品类进行抽象和提取后,将大量相同的操作或者变量封装到抽象类中。

具体操作

简单工厂模式:定义一个工厂类,可以根据参数的不同返回不同类的实例(一般具有共同的父类)。

具体例子

假设我们需要一些图形,这些图形有圆形、三角形……;
当我们没有学设计模式的时候,我们会用最蠢笨的方式:每一个圆形类、三角形类,都创建没有关联的类,这样我们耦合度极高。
而我们这时候可以利用简单工厂模式来解耦。
参考如下:

  • Factory:工厂类,用于通过不同参数来确定创建的对象。
  • Chart:抽象产品类,是圆形类、三角形类的共同属性或者方法抽象出来的抽象类。
  • Circular、Triangle:具体产品类。
//Factory类
public class Factory {
    public static Chart getProduct(String args){
        Chart chart=null;
        if(args=="Triangle"){
            chart=new Triangle();
        }else if(args=="Circular"){
            chart=new Circular();
        }
        return chart;
    }
}

//Chart类
public abstract class Chart {
    public abstract void logChart();
}

public class Circular extends Chart{

    @Override
    public void logChart() {
        System.out.println("我是圆形");
    }
}
public class Triangle extends Chart{

    @Override
    public void logChart() {
        System.out.println("我是三角形");
    }
}

测试类:

//测试类
public class Test {
    public static void main(String[] args) {
        Chart chart=Factory.getProduct("Triangle");
        chart.logChart();
        chart=Factory.getProduct("Circular");
        chart.logChart();
    }
}

运行结果:
在这里插入图片描述

总结

简单工厂模式的简化

为了简化结构,我们可以把抽象产品类和工厂类合并,将静态工厂方法移动到抽象产品类中。

优点

  1. 实现了对象创建和使用的分离
  2. 可以一定程度上减少使用者记忆量
  3. 引入配置文件,可以不修改客户端代码下更换和增加新的具体产品类。

缺点

  1. 工厂类职责过重,若工厂类无法正常工作,整个系统会受到影响。
  2. 会增加类的个数
  3. 系统扩展困难,如果扩展那么必定修改工厂类逻辑。
  4. 简单工厂模式由于使用了静态工厂模式,造成工厂角色无法形成基于继承的等级结构。

适用场景

  1. 工厂类负责创建的对象比较少,这样工厂方法中业务逻辑不会太重,不会有太多if。
  2. 客户端只需要知道传入工厂类的参数,不关心如何创建对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值