工厂模式
实现的创建者和调用者的分离
1.简单工厂模式
也叫静态工厂模式,工程类一般使用的是静态方法,通过接收不同的参数返回不同的实例对象。要增加新产品需要修改代码(违反开闭原则)。
/**
* 汽车生产简单工厂
*/
public class CarFactory {
public static Car createCar(String type) {
if(type.equals("迪奥")) {
return new Aody();
}else if(type.equals("ysl")){
return new Byd();
}else {
return null;
}
}
/*public static Car createAody() {
return new Aody();
}
public static Car createByd() {
return new Byd();
}*/
}
/**
* 使用简单工厂模式,有一个CarFactory工厂
* 不需要知道生产具体汽车的细节(Aody类,Byd类),直接调用工厂生产
*/
public class Clint02 {
public static void main(String[] args) {
Car c1=CarFactory.createCar("奥迪");
Car c2=CarFactory.createCar("比亚迪");
c1.run();
c2.run();
}
}
2.工厂方法模式
避免了简单工厂的缺点(开闭原则),有一组实现了相同接口的的工厂类,但需要创建更多的类
public interface CarFactiry {
Car createCar();
}
public class AodyFactory implements CarFactiry {
@Override
public Car createCar() {
// TODO 自动生成的方法存根
return new Aody();
}
}
public class BydFactory implements CarFactiry {
@Override
public Car createCar() {
// TODO 自动生成的方法存根
return new Byd();
}
}
public class Client01 {
public static void main(String[] args) {
Car c1=new BydFactory().createCar();
Car c2=new AodyFactory().createCar();
c1.run();
c2.run();
}
}
这两个模式相比,一般使用简单工厂模式
3.抽象工厂模式
不可以增加产品,可以增加产品族