java设计模式之工厂模式

简介

Factory mode即将实例的生成交给子类(会用到Template mode(将具体处理就给子类))

具体实现

factory包

product类

/**
* 工厂模式(factory Method),将实例的生成交给子类。
* 父类决定实例的生产方式,但并不决定所要生成的具体的类,具体的处理全部交给子类负责。这样可以将生产实例的框架(framework)
* 和实际负责生成实例的类解耦。
* @author Administrator
* Product为"产品"类。该类的实现交给其子类。
*
*/
public abstract class Product {
  public abstract void use();
}

factory类

/**
* Factory用到模板模式(将具体的处理交给子类,父类只定义生产流程(规则))
* @author Administrator
*
*/
public abstract class Factory {
   //定义工厂(先生成产品,再注册产品)
   public final Product create(String owner) {
   	Product p = createProduct(owner);
   	registerProduct(p);
   	return p;
   }
   //createProduct()--"用来生产产品",其具体实现交给其子类
   protected abstract  Product createProduct(String owner);
   //registerProduct()--"用来注册产品",其具体实现交给子类
   protected abstract void registerProduct(Product p);

}

idcard包

IDCard类

//IDCard负责生产(Product)实例
public class IDCard extends Product {
	private String owner;
	//使用默认修饰,让外包类不能生产IDCard的实例,必须通过IDFactory生成其实例
	IDCard(String owner){
		System.out.println("制作"+owner+"的ID卡");
		this.owner = owner;
	}
	@Override
	public void use() {
		System.out.println("使用"+ owner + "的ID卡");
		
	}
	public String getOwner() {
		return owner;
	}
	

}

IDCardFactory类

/**
* IDCardFactory生成实例,具体处理类
* @author Administrator
*
*/
public class IDCardFactory extends Factory {
   private List owners = new ArrayList();
   @Override
   //生成IDCard实例
   protected Product createProduct(String owner) {
   	return new IDCard(owner);
   }

   @Override
   protected void registerProduct(Product p) {
   	owners.add(((IDCard)p).getOwner());
   }
   public List getOwners() {
   	return owners;
   }

}

main包

main类

public class Main {
	public static void main(String[] args) {
	  	//此处Product不能new IDCard生成实例,必须由IDCardFactory生成其实例
		Factory factory = new IDCardFactory();
		Product card1 = factory.create("小明");
		Product card2 = factory.create("小红");
		Product card3 = factory.create("小张");
		card1.use();
		card2.use();
		card3.use();
	}

}

未完待续

参考文件:

《图解设计模式》【日】结成浩 著 杨文轩 译

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值