1. 为什么使用工厂模式?
实例化对象,用工厂方法代替new操作。2. 怎样使用工厂模式?
定义一个接口来创建对象,但是由子类决定哪些类需要被实例化,即把实例化操作推迟到子类中去实现。3. 什么情况下适用工厂模式?
1. 有一组类似的对象需要创建。2. 在编码时不能预见需要创建哪种类的实例。
3. 系统需要考虑扩展性。
4. 两种应用
1. 工厂模式应用
public interface Car {
public void build();
}
public class Benz implements Car {
@Override
public void build() {
// TODO Auto-generated method stub
System.out.println("-------------奔驰车-------------");
}
}
public class BMW implements Car {
@Override
public void build() {
// TODO Auto-generated method stub
System.out.println("-------------宝马车-------------");
}
}
public class CarFactory {
public Car getCar(String s){
if("benz".equals(s)){
return new Benz();
}else if("bmw".equals(s)){
return new BMW();
}else{
return null;
}
}
}
public class CarTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
CarFactory c = new CarFactory();
Car bmw = c.getCar("bmw");
bmw.build();
}
}
2. 抽象工厂模式应用
public interface SportsCar {
public void bulidSportsCar();
}
public interface CommonCar {
public void buildCommonCar();
}
public class NewSportsCar implements SportsCar {
@Override
public void bulidSportsCar() {
// TODO Auto-generated method stub
System.out.println("NewSportsCar");
}
}
public class OldSportsCar implements SportsCar {
@Override
public void bulidSportsCar() {
// TODO Auto-generated method stub
System.out.println("OldSportsCar");
}
}
public class NewCommonCar implements CommonCar {
@Override
public void buildCommonCar() {
// TODO Auto-generated method stub
System.out.println("NewCommonCar");
}
}
public class OldCommonCar implements CommonCar {
@Override
public void buildCommonCar() {
// TODO Auto-generated method stub
System.out.println("OldCommonCar");
}
}
public interface CarFactory {
public SportsCar getSportsCar();
public CommonCar getCommonCar();
}
public class NewCarFactory implements CarFactory {
@Override
public SportsCar getSportsCar() {
// TODO Auto-generated method stub
return new NewSportsCar();
}
@Override
public CommonCar getCommonCar() {
// TODO Auto-generated method stub
return new NewCommonCar();
}
}
public class OldCarFactory implements CarFactory {
@Override
public SportsCar getSportsCar() {
// TODO Auto-generated method stub
return new OldSportsCar();
}
@Override
public CommonCar getCommonCar() {
// TODO Auto-generated method stub
return new OldCommonCar();
}
}
public class CarTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
CarFactory factory = new NewCarFactory();
NewSportsCar nsc = (NewSportsCar) factory.getSportsCar();
nsc.bulidSportsCar();
CarFactory factory2 = new OldCarFactory();
OldSportsCar osc = (OldSportsCar) factory2.getSportsCar();
osc.bulidSportsCar();
}
}