工厂模式

工厂模式:
在创建对象时,不会暴漏给调用者具体创建逻辑,是通过一个公共的接口指向创建的对象。

介绍

意图:创建一个创建对象的接口,让其子类来决定实例化哪一个工厂类,工厂模式使创建过程延迟到子类进行。
何时使用:明确不同情况下创建不同的实例。
关键代码:创建对象延迟到字类进行。
优点:
只需知道名称就可以了
屏蔽了产品的具体实现, 调用者只需关心产品的接口。
扩展性高
缺点:
每创建一个产品,都需要具体实现类和实现工厂,使得程序中的类成倍增加,在一定程度上增加了系统的复杂度,同时增加了系统类的依赖。
注意事项:简单类无需工厂模式。

实现(使用枚举)

// 枚举工厂
package cn.domin.design.factory;

public enum Factory {
	
	PUER("puer", new Puer()),
	DRAGONWELL("dragonwell", new DragonWell());
	
	private String name;
	private Tea tea;
	
	public static Tea getTeas(String name) {
		
		for(Factory fac: Factory.values()) {
			if (fac.getName().equalsIgnoreCase(name)) {
				return fac.getTea();
			}
		}
		return null;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Tea getTea() {
		return tea;
	}
	public void setTea(Tea tea) {
		this.tea = tea;
	}
	private Factory(String name, Tea tea) {
		this.name = name;
		this.tea = tea;
	}

}
// 接口
package cn.domin.design.factory;

public interface Tea {
	
	public void drink();

}

// 子类对象
package cn.domin.design.factory;

public class Puer implements Tea{

	@Override
	public void drink() {
		System.out.println("普洱茶");
	}
}


posted @ 2019-09-05 17:13  kungFuPander  阅读(96)  评论(0编辑  收藏  举报