工厂模式是初学者比较费解的模式之一,首先讲讲什么情景下需要工厂模式
1. 当你的系统工程量达到一定级别,需要new很多相似类的时候,你需要考虑此事是否需要借助工厂模式。
2. 类改名字或者更改其构造函数参数是很常见的,当系统特别庞大时,这项工程会让人欲哭无泪。
工厂模式一般有两种实现方式: 简单工厂 和 工厂方法
简单工厂是由3个要素构成: 1 抽象产品角色 2. 具体产品角色 3. 工厂角色
/**
* 抽象产品角色
* @author c_qinshouzhi
*
*/
public interface Car {
public void driveCar();
}
/**
* 具体产品角色
* @author c_qinshouzhi
*
*/
public class Benz implements Car{
@Override
public void driveCar() {
System.out.println("Drive Benz");
}
}
/**
* 工厂类角色
* @author c_qinshouzhi
*
*/
public class CarFactory {
public CarFactory() {
}
public static Car konwCar(String carName){
if(carName.equals("be")){
return new Benz();
}
if(carName.equals("bm")){
return new Bmw();
}
return null;
}
}
是不是简单易懂? 直接调用就行
Car car = CarFactory.konwCar("bm");
car.driveCar();
因为简单工厂并不满足开闭原则,所以就出现了工厂模式,是由4个要素构成
1. 抽象工厂角色 2.具体工厂角色 3. 抽象产品角色 4. 具体产品角色
换句话说就是将简单工厂中的工厂角色再次分为抽象工厂角色和具体工厂角色
/**
* 抽象工厂类
* @author c_qinshouzhi
*
*/
public interface CarDriverFactory {
public Car getCar();
}
/**
* 具体工厂
* @author c_qinshouzhi
*
*/
public class BmwDriverFactory implements CarDriverFactory{
public Car getCar() {
return new Bmw();
}
}
直接调用 CarDriverFactory cf2 = new BmwDriverFactory();
cf2.getCar().driveCar();
不懂加我微信 18221051908