工厂模式2

本文深入讲解工厂方法模式,一种常见的类创建模式。通过定义产品对象的工厂接口,并将实际创建工作延迟到子类,实现了多态性和灵活性。文章通过具体代码示例展示了抽象产品、具体产品、抽象工厂和具体工厂的角色及其实现。
什么是工厂方法模式

工厂方法模式是类的创建模式,其用意是定义一个用于创建产品对象的工厂的接口,而将实际创建工作推迟到工厂接口的子类中。它属于简单工厂模式的进一步抽象和推广。多态的使用,使得工厂方法模式保持了简单工厂模式的特点,而且克服了它的缺点。
工厂方法模式的设计类如下所示
在这里插入图片描述
Product为产品的接口或基类,所有产品都实现这个接口或抽象类(例如ContextProduct),这样就可以在运行时根据需求创建对应的产品类。Creator实现了对产品的所有操作方法,而不实现产品对象的实例化。产品的实例化由Creator的子类来完成。

工厂方法模式代码实现

我们以一位同学的代码为例

  1. 抽象产品角色:
package FactoryMethodPattern;
 
//雷锋
public abstract class LeiFeng {
	public abstract void Sweep();
	
	public abstract void Wash();
	
	public abstract void BuyRice();
	
}
  1. 具体产品角色:

package FactoryMethodPattern;
 
//社区志愿者
public class Volunteer extends LeiFeng {
 
	@Override
	public void Sweep() {
		System.out.print("社区志愿者帮忙打扫   ");
		
	}
 
	@Override
	public void Wash() {
		System.out.print("社区志愿者帮忙洗衣服   ");
		
	}
 
	@Override
	public void BuyRice() {
		System.out.print("社区志愿者帮忙买米   ");
		
	}
 
}
 
//学雷锋的大学生
class  Undergraduate extends LeiFeng {
	
	@Override
	public void Sweep() {
		System.out.print("大学生帮忙打扫   ");
		
	}
 
	@Override
	public void Wash() {
		System.out.print("大学生帮忙洗衣服   ");
		
	}
 
	@Override
	public void BuyRice() {
		System.out.print("大学生帮忙买米   ");
		
	}
 
}
  1. 抽象工厂角色:
package FactoryMethodPattern;
 
//雷锋工厂
public interface IFactory {
	LeiFeng CreateLeiFeng();
}
  1. 具体工厂角色:
package FactoryMethodPattern;
 
//社区志愿者工厂
public class VolunteerFactory implements IFactory {
	@Override
	public LeiFeng CreateLeiFeng() {
		return new Volunteer();
	}
 
}
 
//学雷锋的大学生工厂
class UndergraduateFactory implements IFactory {
	@Override
	public LeiFeng CreateLeiFeng() {
		return new Undergraduate();
	}
 
}
  1. 客户端测试代码:
package FactoryMethodPattern;
 
public class Test {
	public static void main(String[] args) {
						  //要换成'社区志愿者',修改这里就可以
		IFactory factory = new UndergraduateFactory();
		LeiFeng student = factory.CreateLeiFeng();
		
		student.Sweep();
		student.Wash();
		student.BuyRice();
		System.out.println("\n --------------------------");
		
		IFactory factory2 = new VolunteerFactory();
		LeiFeng volunteer = factory2.CreateLeiFeng();
		
		volunteer.Sweep();
		volunteer.Wash();
		volunteer.BuyRice();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值