美文网首页
设计模式学习--简单工厂模式

设计模式学习--简单工厂模式

作者: 一只西西狸 | 来源:发表于2019-12-21 22:01 被阅读0次

模式定义

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


简单工厂模式结构图

简单工厂模式包含如下角色:

1.Factory(工厂角色)

工厂角色即工厂类,它是简单工厂模式的核心,负责实现创建所有实例的内部逻辑;工厂类可以被外界直接调用,创建所需的产品对象;在工厂类中提供了静态的工厂方法,它返回一个抽象产品类Product,所有的具体产品都是抽象产品的子类。

2.Product(抽象产品角色)

抽象产品角色是简单工厂模式所创建的所有对象的父类,负责描述所有实例所共有的公共接口,它的引入将提高系统的灵活性,使得在工厂类中只需定义一个工厂方法,因为所有创建的具体产品对象都是其子类对象。

3.ConcreteProduct(具体产品角色)

具体产品角色是简单工厂模式的创建目标,所有创建的对象都充当这个角色的某个具体类的实例。每一个具体产品角色都继承了抽象产品角色,需要实现定义在抽象产品中的抽象方法。

模式分析

在简单工厂模式中,工厂类根据工厂方法所传入的参数来动态决定应该创建出哪一个产品类的实例。
实例:某销售管理系统支持多种支付方式,如现金支付、信用卡支付、代金券支付等,在设计中如果不使用简单工厂模式,可能会存在如下支付方法:

public class Pay {
    public void pay(String type){
        if(type.equalsIgnoreCase("cash")){
            //现金支付处理
        }else if(type.equalsIgnoreCase("creditcard")){
            //信用卡支付处理
        }else if(type.equalsIgnoreCase("voucher")){
            //代金券支付处理
        }
        //...
    }
}

使用简单工厂模式,可以对原有代码进行如下改进:
(1)为了保证系统的扩展性并将各种支付类型对象的创建封装在一个统一的方法中,需要引入抽象支付方式类,它定义了抽象的支付方法,抽象支付方法类定义如下:

public abstract class AbstractPay{
    public void pay(){
        //现金支付处理代码
    }
}

(2)将每一种支付方式封装在一个独立的类中,各个支付方式类相对独立,修改其中一个,对其他类无任何影响,这些独立的支付方式类充当了具体产品类的角色,是抽象支付方式类的子类,如现金支付类定义如下:

public class CashPay extends AbstractPay{
    public void pay(){
        //现金支付代码
    }
}

(3)提供一个代码相对简单,而且只负责创建对象而不必关心对象细节的工厂类来创建各种具体的支付方式产品类,注意其工厂方法的返回类型是抽象类型,支付方式工厂类定义如下:

public class PayMethodFactory {
    public static AbstractPay getPayMethod(String type){
        if(type.equalsIgnoreCase("cash")){
            return new CashPay();
        }else if(type.equalsIgnoreCase("creditcard")){
            return new CreditcardPay();
        }
    }
} 

相关文章

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • 设计模式一、单例模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 简单单例(推荐...

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • 设计模式-抽象工厂模式

    前面我们学习了了简单工厂模式和工厂方法模式,今天我们来学习设计模式中最后的一种工厂模式——抽象工厂模式(Abstr...

  • 设计模式三、工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 工厂模式 在一...

  • 设计模式

    设计模式(视频总结) [TOC] 一、简单工厂模式(Simple Factory) 简单工厂模式: 简单工厂模式属...

  • iOS设计模式-工厂模式

    工厂模式分为简单工厂模式,工厂模式、抽象工厂模式三类。 简单工厂模式 1. 定义 简单工厂模式并不是常用的设计模式...

  • Android设计模式:工厂设计模式

    目录 简单工厂模式工厂方法模式抽象工厂模式 简单工厂模式 简单工厂模式是所有工厂模式的基础,不属于23种设计模式范...

  • 相近设计模式比较

    设计模式干货: 简单工厂模式 vs. 工厂模式 vs. 抽象工厂模式简单工厂和工厂模式区别? 简单工厂没有多个子类...

网友评论

      本文标题:设计模式学习--简单工厂模式

      本文链接:https://www.haomeiwen.com/subject/hpqnnctx.html