工厂设计模式优点:
1、一个调用者想创建一个对象,只要知道其名称就可以了。
2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
3、屏蔽产品的具体实现,调用者只关心产品的接口。
工厂设计模式缺点:
增加一个产品,就要增加一个具体实现类和修改工厂类,增加代码的复杂度。
package com.wms.factoryPattern;
public interface Car {
void run();
}
package com.wms.factoryPattern;
public class BaoMa implements Car {
public void run() {
System.out.println("baoma......");
}
}
package com.wms.factoryPattern;
public class BenChi implements Car {
public void run() {
System.out.println("BenChi......");
}
}
package com.wms.factoryPattern;
public class QQ implements Car {
public void run() {
System.out.println("QQ......");
}
}
package com.wms.factoryPattern;
/**
* @date:2018/11/7
* @desc: 工厂类
*/
public class CarFactory {
/**
* @return 根据需求,创建不同的实现类对象
*/
public Car getCar(String type) {
if (type == null)
return null;
if ("BaoMa".equals(type))
return new BaoMa();
if ("BenChi".equals(type))
return new BenChi();
if ("QQ".equals(type))
return new QQ();
return null;
}
}
package com.wms.factoryPattern;
/**
* @date:2018/11/7
* @desc: 设计模式之工厂模式
*
* 使用环境:不同条件下创建不同实例
* 隐藏实例的创建逻辑,提供统一的接口。
*
* 优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。
* 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
* 3、屏蔽产品的具体实现,调用者只关心产品的接口。
缺点:
每次增加一个产品时,都需要增加一个具体类和对象实现工厂,
使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,
同时也增加了系统具体类的依赖。这并不是什么好事。
*
*/
public class Demo {
public static void main(String[] args) {
CarFactory shapeFactory = new CarFactory();
Car baoma = shapeFactory.getCar("BaoMa");
baoma.run();
Car benchi = shapeFactory.getCar("BenChi");
benchi.run();
Car qq = shapeFactory.getCar("QQ");
qq.run();
}
}