java设计模式——工厂方法模式

本文详细解析了Java中工厂模式的应用,包括抽象工厂、简单工厂和工厂方法模式的区别,通过具体代码实例展示了如何在实际场景中使用工厂模式进行类的创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《大话设计模式》第八章

package ch08;

public class LeiFeng {
	public void sweep() {
		System.out.println("扫地");
	}
	
	public void wash() {
		System.out.println("洗衣");
	}
	
	public void buyRice() {
		System.out.println("买米");
	}
}


 

package ch08;

public class Undergraduate extends LeiFeng {

}


 

package ch08;

public class Volunteer extends LeiFeng {

}


 

package ch08;

public interface IFactory {
	LeiFeng createLeiFeng();
}


 

package ch08;

public class UndergraduateFactory implements IFactory {

	public LeiFeng createLeiFeng() {
		return new Undergraduate();
	}

}


 

package ch08;

public class VolunteerFactory implements IFactory {

	public LeiFeng createLeiFeng() {
		return new Volunteer();
	}

}


 

package ch08;

/**
 * 工厂模式
 * @author Administrator
 *
 */
public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		IFactory factory = new UndergraduateFactory();
		LeiFeng leiFeng = factory.createLeiFeng();
		leiFeng.buyRice();
		leiFeng.sweep();
		leiFeng.wash();
	}

}

 

上面代码中的LeiFeng,只能是可以实例化的类,而不能是抽象类或者接口。

工厂方法,在JDK中的经典例子,比如Integer.valueOf。

工厂方法模式与简单工厂模式很类似,但是工厂方法模式没有switch case的语句,而是直接在客户端new一个具体的工厂。

抽象工厂模式和工厂方法模式也很像,那么有什么区别吗?

工厂方法,返回一个具体的类型,比如Integer.valueOf,返回的是Integer的实例,而且Integer不是抽象类,是可以实例化的;

抽象工厂方法,返回的可能是任何的类型,Calendar.getInstance,返回的可能是BuddhistCalendar,也可能是JapaneseImperialCalendar,也可能是GregorianCalendar,而且Calendar是抽象类,不能实例化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值