简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,然后去调用不同的类型的方法的一种设计模式。通常用在多个不同类型的调用者,返回相同类型的结果的场景下。如根据不同的人返回不同的权限等。如本例通过coder、geek、hacker三种不同的人访问工厂来返回不同的结果。
首先创建接口类,提供所有示例拥有的方法
public interface SimpleFactory {
publicString getKey();
}
然后创建Coder、Geek、Hacker三个实现类,返回不同的结果
public class Coder implementsSimpleFactory{
@Override
publicString getKey() {
return"this is coder";
}
}
public class Geek implements SimpleFactory{
@Override
publicString getKey() {
return"this is Geek";
}
}
public class Hacker implementsSimpleFactory{
@Override
publicString getKey() {
return"this is hacker";
}
}
创建工厂类,根据类型创建不同的实现类的实例
public class FactoryManager {
publicSimpleFactory getKey(String type){
if(FactorySymbol.CODER.getSymbol().equals(type)){
returnnew Coder();
}elseif(FactorySymbol.GEEK.getSymbol().equals(type)){
returnnew Geek();
}else(FactorySymbol.HACKER.getSymbol().equals(type)){
returnnew Hacker();
}
}
}
public enum FactorySymbol {
CODER("coder","Coder"),GEEK("geek","Geek"),HACKER("hacker","Hacker");
privateString symbol;
privateString description;
privateFactorySymbol(String symbol, String description) {
this.symbol= symbol;
this.description= description;
}
publicString getSymbol() {
returnsymbol;
}
publicvoid setSymbol(String symbol) {
this.symbol= symbol;
}
publicString getDescription() {
returndescription;
}
publicvoid setDescription(String description) {
this.description= description;
}
}
接下来我们来测试
public class FactoryTest {
publicstatic void main(String[] args) {
FactoryManagerfm = new FactoryManager();
SimpleFactorysf = fm.getKey("coder");
Stringkey = sf.getKey();
System.out.println(key);
}
}
通过传入coder类型给工厂方法,创建了一个coder的实例,调用coder的getKey方法,运行结果如下:
简单工厂模式的优点:
代码的复用性高,如果有新的类型产生,只需要在工厂类中添加相应的类型的实例创建就行,不需要改动原有的代码。
简单工厂模式的缺点:
需要的新的实例就需要修改工厂类,如果实例非常多的时候,工厂类创建实例的代码会非常多,不易于维护。