工厂模式
2018-07-10 本文已影响7人
蒸汽飞船
简单工厂模式:
简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。
简单工厂模式的缺点是:
工厂类过于庞大,包含了大量的if…else代码,系统扩展不灵活,如果增加新类型的产品,必须修改静态工厂方法的业务逻辑,违反了开闭原则。
适用于:少量产品的情况下
工厂方法模式
就是一个产品一个工厂;
在工厂方法模式中,不再提供一个统一的工厂类来创建所有的产品对象,而是针对不同的产品提供不同的工厂,再抽象出来一个基类工厂。
例子:
- 基类罐头工厂 苹果罐头工厂 桃子罐头工厂
- 基类罐头产品 苹果罐头 桃子罐头
抽象工厂模式
抽象工厂模式和工厂方法模式最大的区别是,工厂方法针对的是产品等级,而抽象工厂创建的是产品族。
举例:
//城堡
public interface Castle {
String getDescription();
}
//国王
public interface King {
String getDescription();
}
//军队
public interface Army {
String getDescription();
}
//王国(抽象工厂)
public interface KingdomFactory {
Castle createCastle();
King createKing();
Army createArmy();
}
//精灵王国
public class ElfKingdomFactory implements KingdomFactory {
public Castle createCastle() {
return new ElfCastle();
}
public King createKing() {
return new ElfKing();
}
public Army createArmy() {
return new ElfArmy();
}
}
//兽人王国
public class OrcKingdomFactory implements KingdomFactory {
public Castle createCastle() {
return new OrcCastle();
}
public King createKing() {
return new OrcKing();
}
public Army createArmy() {
return new OrcArmy();
}
}
// 精灵族的城堡->
public class ElfCastle implements Castle {
static final String DESCRIPTION = "This is the Elven castle!";
@Override
public String getDescription() {
return DESCRIPTION;
}
}
//精灵族的国王
public class ElfKing implements King {
static final String DESCRIPTION = "This is the Elven king!";
@Override
public String getDescription() {
return DESCRIPTION;
}
}
//精灵族的军队
public class ElfArmy implements Army {
static final String DESCRIPTION = "This is the Elven Army!";
@Override
public String getDescription() {
return DESCRIPTION;
}
}
//兽人相关的略