前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单工厂模式(SimpleFactoryPattern)- 最易懂的设计模式解析

简单工厂模式(SimpleFactoryPattern)- 最易懂的设计模式解析

作者头像
Carson.Ho
发布2019-02-22 17:55:22
7.1K1
发布2019-02-22 17:55:22
举报
文章被收录于专栏:Android知识分享Android知识分享

前言

今天我来全面总结一下Android开发中最常用的设计模式 - 简单工厂模式。

关于设计模式的介绍,可以看下我之前写的:1分钟全面了解“设计模式”


目录

这里写图片描述
这里写图片描述

1. 含义

  • 简单工厂模式又叫静态方法模式(因为工厂类定义了一个静态方法)
  • 现实生活中,工厂是负责生产产品的;同样在设计模式中,简单工厂模式我们可以理解为负责生产对象的一个类,称为“工厂类”。

2. 解决的问题

将“类实例化的操作”与“使用对象的操作”分开,让使用者不用知道具体参数就可以实例化出所需要的“产品”类,从而避免了在客户端代码中显式指定,实现了解耦。

即使用者可直接消费产品而不需要知道其生产的细节


3. 模式原理

3.1 模式组成

组成(角色)

关系

作用

抽象产品(Product)

具体产品的父类

描述产品的公共接口

具体产品(Concrete Product)

抽象产品的子类;工厂类创建的目标类

描述生产的具体产品

工厂(Creator)

被外界调用

根据传入不同参数从而创建不同具体产品类的实例

3.2 UML类图
这里写图片描述
这里写图片描述
3.3 使用步骤
  • 创建抽象产品类 & 定义具体产品的公共接口;
  • 创建具体产品类(继承抽象产品类) & 定义生产的具体产品;
  • 创建工厂类,通过创建静态方法根据传入不同参数从而创建不同具体产品类的实例;
  • 外界通过调用工厂类的静态方法,传入不同参数从而创建不同具体产品类的实例

4. 实例

接下来我用一个实例来对简单工厂模式进行更深一步的介绍。

4.1 实例概况
  • 背景:小成有一个塑料生产厂,用来做塑料加工生意
  • 目的:最近推出了3个产品,小成希望使用简单工厂模式实现3款产品的生产
4.2 使用步骤

实现代码如下:

步骤1. 创建抽象产品类,定义具体产品的公共接口

代码语言:javascript
复制
abstract class Product{
    public abstract void Show();
}

步骤2. 创建具体产品类(继承抽象产品类),定义生产的具体产品

代码语言:javascript
复制
//具体产品类A
class  ProductA extends  Product{

    @Override
    public void Show() {
        System.out.println("生产出了产品A");
    }
}

//具体产品类B
class  ProductB extends  Product{

    @Override
    public void Show() {
        System.out.println("生产出了产品C");
    }
}

//具体产品类C
class  ProductC extends  Product{

    @Override
    public void Show() {
        System.out.println("生产出了产品C");
    }
}

步骤3. 创建工厂类,通过创建静态方法从而根据传入不同参数创建不同具体产品类的实例

代码语言:javascript
复制
class  Factory {
    public static Product Manufacture(String ProductName){
//工厂类里用switch语句控制生产哪种商品;
//使用者只需要调用工厂类的静态方法就可以实现产品类的实例化。
        switch (ProductName){
            case "A":
                return new ProductA();

            case "B":
                return new ProductB();

            case "C":
                return new ProductC();

            default:
                return null;

        }
    }
}

步骤4. 外界通过调用工厂类的静态方法,传入不同参数从而创建不同具体产品类的实例

代码语言:javascript
复制
//工厂产品生产流程
public class SimpleFactoryPattern {
    public static void main(String[] args){
        Factory mFactory = new Factory();

        //客户要产品A
        try {
//调用工厂类的静态方法 & 传入不同参数从而创建产品实例
            mFactory.Manufacture("A").Show();
        }catch (NullPointerException e){
            System.out.println("没有这一类产品");
        }

        //客户要产品B
        try {
            mFactory.Manufacture("B").Show();
        }catch (NullPointerException e){
            System.out.println("没有这一类产品");
        }

        //客户要产品C
        try {
            mFactory.Manufacture("C").Show();
        }catch (NullPointerException e){
            System.out.println("没有这一类产品");
        }

        //客户要产品D
        try {
            mFactory.Manufacture("D").Show();
        }catch (NullPointerException e){
            System.out.println("没有这一类产品");
        }
    }
}

结果输出:

代码语言:javascript
复制
生产出了产品A
生产出了产品C
生产出了产品C
没有这一类产品

5. 优点

  • 将创建实例的工作与使用实例的工作分开,使用者不必关心类对象如何创建,实现了解耦;
  • 把初始化实例时的工作放到工厂里进行,使代码更容易维护。 更符合面向对象的原则 & 面向接口编程,而不是面向实现编程。

6. 缺点

  • 工厂类集中了所有实例(产品)的创建逻辑,一旦这个工厂不能正常工作,整个系统都会受到影响;
  • 违背“开放 - 关闭原则”,一旦添加新产品就不得不修改工厂类的逻辑,这样就会造成工厂逻辑过于复杂。
  • 简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构。

7. 应用场景

在了解了优缺点后,我们知道了简单工厂模式的应用场景:

  • 客户如果只知道传入工厂类的参数,对于如何创建对象的逻辑不关心时;
  • 当工厂类负责创建的对象(具体产品)比较少时。

8. 总结

本文主要对简单工厂模式进行了全面介绍,接下来将介绍工厂方法模式 & 其他设计模式,有兴趣可以继续关注Carson_Ho的安卓开发笔记!!!!

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 目录
  • 1. 含义
  • 2. 解决的问题
  • 3. 模式原理
  • 4. 实例
    • 结果输出:
    • 5. 优点
    • 6. 缺点
    • 7. 应用场景
    • 8. 总结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档