首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java常用设计模式--三种工厂模式之简单工厂模式(Simple Factory)

Java常用设计模式--三种工厂模式之简单工厂模式(Simple Factory)

作者头像
gang_luo
发布2020-08-13 11:36:57
3810
发布2020-08-13 11:36:57
举报
文章被收录于专栏:gang_luogang_luo

严格的说,简单工厂模式并不是23种常用的设计模式之一,它只算工厂模式的一个特殊实现。简单工厂模式在实际中的应用相对于其他2个工厂模式用的还是相对少得多,因为它只适应很多简单的情况。

最重要的是它违背了我们在概述中说的 开放-封闭原则 (虽然可以通过反射的机制来避免,后面我们会介绍到) 。因为每次你要新添加一个功能,都需要在if-else 语句(或者switch-case 语句)中去修改代码,添加分支条件。

适用场景

(1)需要创建的对象较少。

(2)客户端不关心对象的创建过程。

简单工厂模式角色分配:

  1. 工厂(Factory)角色 :简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
  2. 抽象产品(Product)角色 :简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
  3. 具体产品(Concrete Product)角色:简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

举个例子:

奶茶店有各种奶茶,奶茶类别有波霸奶茶、红豆奶茶、 珍珠奶茶等

奶茶店-->工厂(Factory)角色

奶茶-->抽象产品(Product)角色

波霸奶茶、红豆奶茶、 珍珠奶茶-->具体产品(Concrete Product)角色

例子代码:

package com.example.simplefactory;

public interface MilkyTea {

    /**
     * 制造奶茶
     */
    void makeMilkyTea();

}
package com.example.simplefactory;

/**
 * 红豆奶茶
 */
public class OrmosiaMilkyTea implements MilkyTea {

    @Override
    public void makeMilkyTea() {
        System.out.println("制作红豆奶茶");
    }
}
package com.example.simplefactory;

public class BoBaMilkyTeam implements MilkyTea {
    @Override
    public void makeMilkyTea() {
        System.out.println("制作波霸奶茶");
    }
}
package com.example.simplefactory;

public class PearlMilkyTea implements MilkyTea {
    @Override
    public void makeMilkyTea() {
        System.out.println("制作珍珠奶茶");
    }
}
package com.example.simplefactory;

public class SimpleFactory {

    public static final int TYPE_BB = 1;//波霸奶茶
    public static final int TYPE_HD = 2;//红豆奶茶
    public static final int TYPE_ZZ = 3;//珍珠奶茶

    public static MilkyTea createMilkyTea(int type) {
        MilkyTea milkyTea = null;
        if(type == TYPE_BB){
            milkyTea = new BoBaMilkyTeam();
        }else if(type == TYPE_HD){
            milkyTea = new OrmosiaMilkyTea();
        }else if(type == TYPE_ZZ){
            milkyTea = new PearlMilkyTea();
        }
        return milkyTea;
    }

}
package com.example.simplefactory;

public class Test {

    public static void main(String[] args) {
        MilkyTea milkyTea = SimpleFactory.createMilkyTea(1);
        milkyTea.makeMilkyTea();
    }

}

我想多增加一种奶茶品种,四季奶青,还需要修改工厂类方法,扩展性差

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 适用场景
  • 简单工厂模式角色分配:
  • 举个例子:
  • 例子代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档