设计模式之简单工厂模式

简单工厂模式

定义:专门负责创建其他实例的一个类。简单工厂模式属于创建型模式,根据需求创建不同类。顾名思义,简单工厂,真是非常简单。

这里写图片描述

通常简单工厂模式包括三个角色:

  • Creator : 工厂类,实例化对象的核心类,按照逻辑创建实例。
  • Product : 抽象产品类,所有具体产品类的父类,可以是接口或者抽象类,主要定义抽象类型。
  • Concrete Product :具体产品类,具体实例对象。

比如奶茶店有卖珍珠奶茶、抹茶奶茶、奶盖奶茶等,这里奶茶店就是工厂类,具体产品类各是珍珠奶茶、抹茶奶茶、奶盖奶茶,奶茶就是它们的抽象产品类。

代码示例

抽象产品类

    public abstract class MilkTea {...}

具体产品类

    public class PearlMilkTea extends MilkTea{...}//珍珠奶茶
    public class MatchalMilkTea extends MilkTea{...}//抹茶奶茶
    public class MilkCapMilkTea extends MilkTea{...}//奶盖奶茶

工厂类

    public class MilkTeaCreator {

        public MilkTea getMilkTea(String type) {//根据名字获取实例
            MilkTea milkTea = null;
            if (type.equals("珍珠奶茶")) {
                milkTea = new PearlMilkTea();
            } else if (type.equals("抹茶奶茶")) {
                milkTea = new MatchalMilkTea();
            } else if (type.equals("奶盖奶茶")) {
                milkTea = new MilkCapMilkTea();
            }

            return milkTea;
        }
    }

客户端

    MilkTeaCreator creator = new MilkTeaCreator();
    PearlMilkTea pearlMilkTea = (PearlMilkTea) creator.getMilkTea("珍珠奶茶");
    MatchalMilkTea matchalMilkTea = (MatchalMilkTea) creator.getMilkTea("抹茶奶茶");
    MilkCapMilkTea milkCapMilkTea = (MilkCapMilkTea) creator.getMilkTea("奶盖奶茶");

可以看出创建实例的任务交给了Creator,让其决定如何创建实例,这样的好处是分离客户端对产品实例的耦合,哪天加入柠檬奶茶就可以在Creator里加多判断,灵活很多。
其实上边介绍的是静态简单工厂,还有一种会更灵活,利用反射机制动态创建实例。

动态简单工厂

只要将工厂类改造一下,但是参数改为具体类型的包名。

    public MilkTea getMilkTea(String cn) {
        MilkTea milkTea = null;

        try {
            Class<?> cls = Class.forName(cn);
            milkTea = (MilkTea) cls.newInstance();
        } catch (ClassNotFoundException e) {
        } catch (InstantiationException e) {
        } catch (IllegalAccessException e) {
        }

        return milkTea;
    }

客户端

        PearlMilkTea pearlMilkTea = (PearlMilkTea) creator.getMilkTea("PearlMilkTea");
        MatchalMilkTea matchalMilkTea = (MatchalMilkTea) creator.getMilkTea("MatchalMilkTea");
        MilkCapMilkTea milkCapMilkTea = (MilkCapMilkTea) creator.getMilkTea("MilkCapMilkTea");

动态工厂通常获取xml文件相应对象的包名,创建实例,非常灵活。

总述,简单工厂模式是真的非常简单,只要记住它是负责专门创建实例的一个类。不足之处望指教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值