简单工厂模式(SimpleFactory)

简单工厂模式(simpleFactory),简单来说就是一个工厂类创建某一类型的类的实例,可以是动态的、选择的创建同一类型的实例。

 

《java与模式》这样对简单工厂模式进行描述的,简单工厂模式设计到工厂角色、抽象产品角色三个角色。

1. 工厂类(creator)角色:担任这个角色的是工厂方法模式的核心,还有与应用紧密相关的商业逻辑。

2.抽象产品角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。

3.具体产品角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色有一个具体的java类实现.

类图如下:

 

 

编写的一个简单工厂模式的例子如下:

 

1.TransportMachine接口

package com.design.simplefactory;

/**
 * 
 *交通工具特征的抽象
 *在类型的等级结构里面,共同的代码应当尽量向上移动(可以是抽象类),以达到共享的目的。
 */
public interface TransportMachine{
	
	public String getName();
	
	public String setName(String name);
	
	public double getSpeed();
	
	public String getKind();
	
	public void setKind(String kind);
	
	public int getBearNum();
	
	public boolean isRunable();
	
	public void setRunable(boolean runable);

}


2.AutoMobile类(TransportMachine的实现者)

package com.design.simplefactory;

/**
 * 交通工具的简单实现者
 * 汽车类
 *
 */
public class AutoMobile implements TransportMachine{

	private String carName = "";
	private int carBearNum = 0;
	private String vehicleKind = null;
	private double speed = 0;
	private boolean runable = false;
	
	@Override
	public int getBearNum() {
		return this.carBearNum;
	}

	@Override
	public String getKind() {
		return this.vehicleKind;
	}

	@Override
	public String getName() {
		return this.carName;
	}
	
	@Override
	public String setName(String name) {
		return this.carName = name;
	}

	@Override
	public double getSpeed() {
		return this.speed;
	}
	
	@Override
	public boolean isRunable() {
		return this.runable;
	}

	@Override
	public void setKind(String kind) {
		this.vehicleKind = kind;
	}
	
	public void setRunable(boolean runable) {
		this.runable = runable;
	}

}


3.TransportManager(TransportMachine的实例creator)

package com.design.simplefactory;

/**
 * 
 *交通工具管理者
 *客户端程序向TransportManager请求所需的交通工具
 */
public class TransportManager {

	public static TransportMachine getVehicle(String vehicleKind, int bearNum){
		
		/*
		 * TransportMachine类起到一个管理者作用,不应该直接
		 * 使用new AutoMobile()操作,应该从数据库获取客户端请求的交通工具类型数据
		 * 或从一个HashTable中获取数据
		 */
		
		/*
		 * 但代码这样编写,依然是硬编码,无法具有灵活性,只有一个一个的if判断。
		 * spring框架使用的是从XML读取相应的bean或由注解中标注,这样一定程度上可以提高灵活性和插入性。
		 */
		
		/*
		 * 简单工厂模式提供某一类型的实例,这一类型可以是接口,抽象类,(或者具体的类),
		 */
		if ("AutoMobile".equals(vehicleKind) && bearNum == 0) {
			return new AutoMobile();
		}
		
		return null;
	}
}


 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值