工厂模式也是spring框架中常用的设计模式,需要的时候通过bean工厂获取。
1.简单工厂模式
传统的获取实例化对象是手动的取new,对象的创建和使用是没有解耦。
public class Factory{
public static void main(String[] args) {
//传统的方式
Car car = new wuling();
Car car1 = new dazhong();
}
}
interface Car{
void name();
}
class wuling implements Car{
public void name(){
System.out.println("买了一辆五菱");
}
}
class dazhong implements Car{
public void name(){
System.out.println("买了一辆大众");
}
}
我们可以创建一个简单的工厂类,专门用来创建实例,根据传入的string名字来判断到底创建哪个实例。但是这样如果新增一个类的话需要改源代码。
public class CarFactory {
public Car getCar(String car){
if(car.equals("wuling")){
return new wuling();
}
if(car.equals("dazhong")){
return new dazhong();
}else {
return null;
}
}
}
public static void main(String[] args) {
//通过简单工厂
CarFactory carFactory = new CarFactory();
Car car2 = carFactory.getCar("wuling");
car2.name();
}
2.工厂方法
先写一个工厂接口,获得car类的方法
public interface CarFactory {
Car getCar();
}
然后每个类都实现这个接口
public class wulingFactory implements CarFactory{
@Override
public Car getCar() {
return new wuling();
}
}
这样就可以直接通过对应的工厂类产生实例,再多一个类只需要新增一个工厂方法即可,满足开闭原则,可以动态扩展。
public class MenthodFactory {
public static void main(String[] args) {
Car car = new wulingFactory().getCar();
Car car1 = new dazhongFactory().getCar();
car.name();
car1.name();
}
}
但是实际还是用简单工厂是比较方便的,复杂度较低。工厂模式有以下的应用