工厂方法模式
工厂方法模式类图:
示例UML类:
示例实现:
package com.kkb.dp.factory.simple;
/**
* 汽车父类
* @date 2021年4月14日
* @describe
*/
public abstract class Car {
public abstract String getName();
}
package com.kkb.dp.factory.simple;
/**
* @date 2021年4月14日
* @describe 汽车子类
*/
public class BMW extends Car{
public String getName() {
return "宝马汽车";
}
}
package com.kkb.dp.factory.simple;
/**
* @date 2021年4月14日
* @describe 汽车子类
*/
public class Jeep extends Car{
public String getName() {
return "jeep汽车";
}
}
package com.kkb.dp.factory.simple;
/**
* @date 2021年4月14日
* @describe 汽车子类
*/
public class Benz extends Car{
public String getName() {
return "奔驰汽车";
}
}
package com.kkb.dp.factory.method;
import com.kkb.dp.factory.simple.Car;
/**
* 工厂方法是符合开闭原则的
* @date 2021年4月14日
* @describe 汽车工厂的接口
*/
public interface CarFactory {
public abstract Car creatCar();
}
package com.kkb.dp.factory.method;
import com.kkb.dp.factory.simple.Benz;
import com.kkb.dp.factory.simple.Car;
/**
* @date 2021年4月14日
* @describe 创建奔驰汽车工厂
*/
public class BenzFactory implements CarFactory{
@Override
//返回具体的汽车
public Car creatCar() {
return new Benz();
}
}
package com.kkb.dp.factory.method;
import com.kkb.dp.factory.simple.BMW;
import com.kkb.dp.factory.simple.Car;
/**
* @date 2021年4月14日
* @describe 创建宝马汽车工厂
*/
public class BMWFactory implements CarFactory{
@Override
public Car creatCar() {
return new BMW();
}
}
package com.kkb.dp.factory.method;
import com.kkb.dp.factory.simple.Car;
import com.kkb.dp.factory.simple.Jeep;
/**
* @date 2021年4月14日
* @describe 创建jeep汽车工厂
*/
public class JeepFctory implements CarFactory{
@Override
public Car creatCar() {
// TODO Auto-generated method stub
return new Jeep();
}
}
package com.kkb.dp.factory.method;
import com.kkb.dp.factory.simple.Car;
/**
* 工厂方法模式实现测试类
* @date 2021年4月14日
* @describe
*/
public class TestCar {
public static void main(String[] args) {
Car c1 = new BenzFactory().creatCar();
System.out.println(c1.getName());
Car c2 = new JeepFctory().creatCar();
System.out.println(c2.getName());
}
}
测试类运行结果:
奔驰汽车
jeep汽车