解决的问题:将对象的创建过程隐藏在工厂类中,使用者只需要知道名字就可以获取到想要创建的对象
优点:扩展性高,增加同类型的功能只需要增加一个具体的产品类即可
缺点:每增加一个产品类,工厂类都要增加判断,低内聚
核心类:工厂类、产品接口类、具体产品类
UML图:
举例:宝马和奔驰都属于汽车,在生产汽车的时候,就可以使用简单工厂的设计模式
1、构建产品接口:
/*抽象产品类:所有产品共同的实现的接口*/
public interface ICar {
void isCar();
}
2、构建具体产品:
/*具体工厂类*/
public class BMW implements ICar {
@Override
public void isCar() {
Log.d("TAG","I am BMW");
}
}
public class Gallop implements ICar {
@Override
public void isCar() {
Log.d("TAG","I am Gallop");
}
}
3、构建工厂:
/*工厂类:根据不同的实参创建不同的对象*/
public class Factory {
public static ICar getInstance(String type){
if(type.equals("BMW")){
return new BMW();
}else if(type.equals("Gallop")){
return new Gallop();
}
return null;
}
}
4、外部调用:
Factory.getInstance("BMW").isCar();
Factory.getInstance("Gallop").isCar();
适合场景:功能复杂,又有很多功能可以共用的模块