工厂模式:
在创建对象时,不会暴漏给调用者具体创建逻辑,是通过一个公共的接口指向创建的对象。
介绍
意图:创建一个创建对象的接口,让其子类来决定实例化哪一个工厂类,工厂模式使创建过程延迟到子类进行。
何时使用:明确不同情况下创建不同的实例。
关键代码:创建对象延迟到字类进行。
优点:
只需知道名称就可以了
屏蔽了产品的具体实现, 调用者只需关心产品的接口。
扩展性高
缺点:
每创建一个产品,都需要具体实现类和实现工厂,使得程序中的类成倍增加,在一定程度上增加了系统的复杂度,同时增加了系统类的依赖。
注意事项:简单类无需工厂模式。
实现(使用枚举)
// 枚举工厂
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("普洱茶");
}
}