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

模式定义
又称静态工厂方法模式,它属于创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都是具有共同的父类。
简单工厂模式结构图
简单工厂模式包含如下角色:
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();
		}
	}
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值