/**
* @author haowq 2021/4/25 10:06
* 简单工厂,扩展性不好,扩展违反开闭原则
*/
public class SimpleFactory {
public Car createCar(){
return new Car();
}
public Plane createPlane(){
return new Plane();
}
//other create operator
}
工厂方法 相比于简单工厂可以生产各种产品,工厂方法值生产一种产品,相当于家庭作坊向流水线转型
/**
* @author haowq 2021/4/27 9:53
* 一个工厂对应一种产品,用户只用知道 工厂名称
* 相比于简单工厂模式,满足开闭原则,扩展工厂只需要继承工厂接口,不需要修改原有代码
*/
public interface MethodFactory {
Animal newAnimal();
}
/**
*马工厂
*/
public class HorseFactory implements MethodFactory {
@Override
public Animal newAnimal() {
return new Horse();
}
}
/**
*牛工厂
*/
public class CowFactory implements MethodFactory{
@Override
public Animal newAnimal() {
return new Cow();
}
}
/**
* @author haowq 2021/4/27 10:01
* 抽象工厂,有产品族的概念,两个维度,工厂维度和产品维度,
* 工程维度上方便扩展,产品维度扩展的话违反开闭原则
*/
public interface AbstractFactroy {
Tank newTank();
Bullet newBullet();
}
/**
* Good 工厂
*/
public class GoodAbastractFactory implements AbstractFactroy {
@Override
public Tank newTank() {
return new GoodTank();
}
@Override
public Bullet newBullet() {
return new GoodBullet();
}
}
/**
* Bad 工厂
*/
public class BadAbastractFactory implements AbstractFactroy {
@Override
public Tank newTank() {
return new BadTank();
}
@Override
public Bullet newBullet() {
return new BadBullet();
}
}