任何可以产生对象的方法或类,都可以称之为工厂
单例也是一种工厂
为什么有了new之后,还要有工厂
灵活控制生产过程
权限、修饰、日志等等
任意的定义交通工具
继承Moveable
任意定制生产过程
Moveable XXXFactory.create();
任意定制产品一族
package com.design.factorymethod;
public class Main {
public static void main(String[] args) {
/*Car c = new Car();
c.go();*/
/*Plane p =new Plane();
p.go();*/
/*Moveable m =new Car();
m.go();*/
Moveable m=new SimpleVehicleFactory().createCar();
m.go();
/*Moveable m= new CarFactory().createCar();
m.go();*/
}
}
package com.design.factorymethod;
public interface Moveable {
void go();
}
package com.design.factorymethod;
public class Plane implements Moveable{
public void go(){
System.out.println("Plant.........");
}
}
package com.design.factorymethod;
public class Car implements Moveable{
public void go() {
System.out.println("Car go ............");
}
}
package com.design.factorymethod;
public class CarFactory {
/*public Car create(){
System.out.println("a car created!");
return new Car();
}*/
public Moveable create(){
System.out.println("a car created!");
return new Car();
}
}
package com.design.factorymethod;
/**
* 简单工厂的可扩展性并不好
*/
public class SimpleVehicleFactory {
public Car createCar(){
//前置操作,可以进行一部分业务处理,也能后面创建后进行一部分业务处理
return new Car();
}
public Plane createPlane(){
return new Plane();
}
}
抽象工厂,创建几个方法,当需要再次变换为另外的几个同样类似的方法,相当于更换一套产品,产品一族的概念,一批一批的更换
代码见 https://github.com/lllmmmnnn1/DesignPattern
工厂方法比较方便产品的扩展,但是抽象工厂是比较方便多个同性质的产品一族的扩展,这两种都有着他的局限性,spring 的IOC很好的融合了两种的优点