简单工厂模式

定义
简单工厂模式属于创建型模式又叫做静态工厂方法模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。
简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

直接将简单工厂模式的使用情景及代码告诉大家可能会有点蒙蔽,以及为什么要用简单工厂模式,我不用行不行?先来一段代码

public class SingleFactoryDemo {
    public static void main(String[] args) {
        Food food=new Hamberger();
        food.eat();
    }

}

interface Food{
    void eat();
}

class Hamberger implements  Food{

    public void eat() {
        System.out.println("汉堡包");
    }
}

分析上面代码可能存在的问题

  • 这样设计时很脆弱的,为什么呢,如果将服务端的Hamberger类名改成Hamberger2,客户端也要进行改动
  • 这样服务端和客户端是耦合的

我们希望的效果是无论服务端代码怎么改,客户端代码不用改。
下面上一段简单工厂的代码:

public class SingleFactoryDemo {
    public static void main(String[] args) {
        Food food=FoodFactory.getFood(1);
        food.eat();
    }

}
interface Food{
    void eat();
}

class Hamberger implements  Food{

    public void eat() {
        System.out.println("汉堡包");
    }
}

class FoodNodles implements  Food{
    public void eat() {
        System.out.println("过桥米线");
    }
}

class FoodFactory{
    private static Food food=null;
    public static Food getFood(int n){
        switch (n){
            case 1:
                food=new Hamberger();
                break;
            case 2:
                food=new FoodNodles();
                break;
        }
        return food;
    }
}

这就是一个很简单的简单工厂模式的例子,我么来分析一下这种设计的优缺点。

  • 简单工厂模式的优点:

  • 实现了客户端与服务端的解耦,服务端把类名改了,客户端也不知道,符合面对接口编程

  • 缺点:

  • 1.客户端不得不死记硬背与服务端的映射关系,比如1代表汉堡包,2代表过桥米线。

  • 2.如果工厂产品特别多,简单工厂会变得十分臃肿,如果有100个产品,上面的例子就要有100个case

  • 3.最重要的是,如果客户端需要一个新的产品时,就需要修改简单工厂的代码,比如如果需要米饭产品,就需要修改简单工厂的代码, 当n=3时,新建一个米饭类,违反了开闭原则。

最后给大家看一下简单工厂模式的UML类图
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值