设计模式-简单工厂模式

简单工厂模式

简单工厂模式并不属于GoF 23个经典设计模式,设计思想相对简单,基本流程为:

将需要创建的各种不同对象(例如各种不同的Chart对象)的相关代码封装到不同的类中,这些类称为具体产品类,而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类;然后提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工厂方法,该方法可以根据所传入的参数不同创建不同的具体产品对象;客户端只需调用工厂类的工厂方法并传入相应的参数即可得到一个产品对象。

简单工厂模式定义如下

定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。

简单工厂模式结构图

avatar

简单工厂模式有如下几种角色

  • Factory(工厂角色)
  • Product(抽象产品角色)
  • ConcreteProduct(具体产品角色)

在简单工厂模式中,客户端通过工厂类来创建一个产品类的实例,而无须直接使用new关键字来创建对象,它是工厂模式家族中最简单的一员。

简单工厂模式实例之权限管理

avataor
public abstract class User {
    public void sameOperation(){
        System.out.println("共同的权利");
    }
    public abstract  void diffOperation();
}

public class Employee extends User {
    @Override
    public void diffOperation() {
        System.out.println("Emplyee的特殊权利");
    }
}

public class Manager extends User {
    @Override
    public void diffOperation() {
        System.out.println("Manager的特殊权利");
    }
}

public class Administrator extends User {
    @Override
    public void diffOperation() {
        System.out.println("Administror的特殊权利");
    }
}

public class UserFactory {
    public static User getUser(int permission){
        if(0==permission){
            return new Employee();
        }else if(1==permission){
            return new Manager();
        }else{
            return new Administrator();
        }
    }
}

public static void main(String[] args){
        User user=UserFactory.getUser(0);
        user.sameOperation();
        user.diffOperation();
        User user1=UserFactory.getUser(1);
        user1.sameOperation();
        user1.diffOperation();
        User user2=UserFactory.getUser(2);
        user2.sameOperation();
        user2.diffOperation();
}

----输出结果----
共同的权利
Emplyee的特殊权利
共同的权利
Manager的特殊权利
共同的权利
Administror的特殊权利

简单工厂模式的优点

  • 工厂类包含必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的职责,而仅仅“消费”产品,简单工厂模式实现了对象创建和使用的分离。
  • 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以在一定程度减少使用者的记忆量。
  • 通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。

简单工厂模式的缺点

  • 由于工厂类集中了所有产品的创建逻辑,职责过重,一旦不能正常工作,整个系统都要受到影响。
  • 使用简单工厂模式势必会增加系统中类的个数(引入了新的工厂类),增加了系统的复杂度和理解难度。
  • 系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
  • 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 设计原则: 要依赖抽象,不要依赖具体类 目录 本文的结构如下: 什么是简单工厂模式 为什么要该模式 模式的结构 代...
    w1992wishes阅读 3,823评论 2 0
  • 二十三种设计模式 - 简单工厂模式 简单工厂模式简介 模式动机 考虑一个简单的软件应用场景,一个软件系统可以提供多...
    JustTheSame阅读 3,738评论 0 2
  • 介绍 工厂模式是最常用的一类创建型设计模式,通常我们所说的工厂模式是指工厂方法模式,它也是使用频率最高的工厂模式。...
    666真666阅读 3,523评论 0 2
  • 简单工厂模式严格来说并不是一个设计模式,反而较像是一种编程习惯。 定义 简单工厂模式(Simple Factory...
    41uLove阅读 3,177评论 1 4
  • 这两天,一个偶然的机会,我见到了小学班主任老师的儿子。我们有三十多年没见了,这也差不多是我和老师久未谋面的时间...
    菩提树下8888阅读 3,443评论 4 1

友情链接更多精彩内容