前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单工厂模式(选择产品)

简单工厂模式(选择产品)

作者头像
幺鹿
发布2018-08-21 15:38:31
3670
发布2018-08-21 15:38:31
举报
文章被收录于专栏:Java呓语Java呓语

简单工厂模式理念介绍

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。

简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

简单工厂的职责划分:客户(创建者)、产品,两类角色。

用一句话来描述该模式解决的问题:{客户} 根据需要 {创建} {产品},我把重要的部分用{}括了出来。

简单工厂模式


它与策略模式的区别

有一个跟简单工厂十分相似的模式是策略模式。策略模式用一句话来描述就是:{客户} 根据需求 {选择} {实现}

模式

描述

简单工厂

{客户} 根据需要 {创建} {产品}

策略模式

{客户} 根据需求 {选择} {实现}

我把它俩列成表格,这样方便作对比。简单工厂与策略模式的{客户}区别不大。简单工厂趋向于创建产品,而策略模式趋向于选择实现(已有产品、或逻辑分支)。也正是因为两者的行为不同,他们也分别被归类为创建型(简单工厂)行为型(策略模式)

太多的理论不如一行代码,下面举出一个例子来给出解决方案。


案例——机器人命令太多不好记的烦恼

Samu是一款可以自己不断学习的机器人,在Alice体会到了Samu的强大功能的同时,也同时无限烦恼Samu的操控命令太多,无法一一记住。Alice不经好奇,Samu又是如何记得这么多命令的呢?

所以我们需要抽象出一个 命令工厂 去创建 客户需要的命令。

代码语言:javascript
复制
public class Factory{

    public Product create(String requirement){
        switch(requirement){
            case "":
                return new OpenDoorProduct();
            default
                return new DefaultProduct();
        }
    }
}

public class Customer{

          void main(String[] args){
                  Factory factory  = new Factory();
                  Product procuct = factory.create("开门");
          }
}

工厂模式将对象的创建和对象本身业务处理分离可以降低系统的耦合度,使得两者修改起来都相对容易。

简单工厂模式

推荐使用简单工厂的场景

1、需要创建的产品对象比较少,并且改动的场景不会频繁。 2、客户端需要知道简单工厂类所需要的参数,这意味着通常在系统内部之间使用简单工厂更合适。 3、创建的产品之间没有关联关系,彼此是独立且处于同一个层级的。比如芒果、香蕉、苹果这样的产品是适合简单工厂模式的。而喜糖、喜糖盒子、礼袋、烟,可能用简单工厂模式不是一个好主意,因为他们都可以被抽象为结婚用品。

因为简单工厂类的职责比较重,所以增加新的产品需要修改工厂类的判断逻辑,这一点与开闭原则是相违背的。

在Android 源码中的应用

  • com.android.internal.telephony.PhoneFactory

代码片段

  • com.android.internal.policy.impl.Policy

makeNewWindow

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简单工厂模式理念介绍
  • 它与策略模式的区别
  • 案例——机器人命令太多不好记的烦恼
  • 推荐使用简单工厂的场景
  • 在Android 源码中的应用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档