1.业务场景
有三个快递公司,京东,中通,顺丰,现在要根据所选择的快递公司获取快递单号。
快速实现业务逻辑处理,如下代码:
在main()中,根据不同的条件创建不同的对象,对象的创建与对象的使用过程没有分离。
class JDservice{
public String get(){
return "快递单号";
}
}
class SFservice{
public String get(){
return "快递单号";
}
}
class ZTservice{
public String get(){
return "快递单号";
}
}
public static void main(String[] args) {
if(sf){
SFservice service = new SFservice();
service.get();
}
if(jd){
JDservice service = new JDservice();
service.get();
}
if(zt){
ZTservice service = new ZTservice();
service.get();
}
}
2. 使用工厂之后的代码
public class Factory{
public static Factory getObject(String type){
Factory factory = null;
switch(type){
case "sf":
factory = new SFservice();
break;
case "jd":
factory = new JDservice();
break;
case "zt":
factory = new ZTservice();
break;
}
return factory;
}
}
public static void main(String[] args) {
Factory factory = Factory.getObject("sf");
factory.get();
}
3. 使用简单工厂的特点
##优点:
- 实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责。
##缺点:
- 在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码将会非常复杂,增加新的产品需要修改工厂类的判断逻辑,这一点与开闭原则是相违背的
##使用场景:
- 工厂类负责创建的对象比较少;客户端只知道传入工厂类的参数,对于如何创建对象不关心。