工厂方法模式简介:
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
下面以car为实例写一个简单的测试程序:
1,创建Car的抽象类:
public abstract class Car {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void descCar();
}
2,创建Car的实现类 BydCar
public class BydCar extends Car {
@Override
public void descCar() {
System.out.println("----BydCar");
}
}
3,创建Car的实现类 AudiCar
public class AudiCar extends Car {
@Override
public void descCar() {
System.out.println("----AudiCar");
}
}
4,创建工厂接口: Factory
public interface Factory {
public Car createCar();
}
5,创建BydCarFactory实现类
public class BydCarFactory implements Factory {
@Override
public Car createCar() {
return new BydCar();
}
}
6,创建AudiCarFactory实现类
public class AudiCarFactory implements Factory {
@Override
public Car createCar() {
return new AudiCar();
}
}
7测试:
public class FactoryMain {
public static void main(String[] args){
Factory bydFactory = new BydCarFactory();
Car bydCar = bydFactory.createCar();
bydCar.descCar();
Factory audiFactory = new AudiCarFactory();
Car audiCar = audiFactory.createCar();
audiCar.descCar();
}
}
结果:
----BydCar
----AudiCar
总结:
在任何需要生成复杂对象的地方,都可以使用工厂方法模式。复杂对象适合使用工厂模式,用 new 就可以完成创建的对象无需使用工厂模式。但是缺点也是难以避免的,每次我们为工厂方法模式添加新的产品时就要编写一个新的产品类,同时还要引入抽象层,这必然会导致类结构的复杂化,所以,在某些情况比较简单时,是否要使用工厂模式,需要设计者权衡利弊了。