工厂模式属于创建型模式
简单工厂模式(使用较多)
思想就是不需要在去自己new对象了,直接在工厂里get对象就行,这里以一个车工厂为例。
车的接口
public interface Car {
public void name();
}
奥迪类,实现了车接口
public class AoDi implements Car {
@Override
public void name() {
System.out.println("奥迪");
}
}
奔驰类,实现了车接口
public class BenChi implements Car {
@Override
public void name() {
System.out.println("奔驰");
}
}
车工厂,用来造奥迪和奔驰
public class CarFactory {
public static Car getAoDi() {
return new AoDi();
}
public static Car getBenChi() {
return new BenChi();
}
}
测试
public class Main {
public static void main(String[] args) {
Car aoDi = CarFactory.getAoDi();
Car benChi = CarFactory.getBenChi();
aoDi.name();
benChi.name();
}
}
运行结果:
工厂方法模式
为了增强代码的可扩展性,这里介绍工厂方法模式,如果我们需要增加其他款的车,而不必要去修改原来的代码,符合了开闭原则,这里距离加了一款宝马,其原理就是给每一款车都设计一个工厂
车的接口
public interface Car {
public void name();
}
奥迪类,实现了车接口
public class AoDi implements Car{
@Override
public void name() {
System.out.println("奥迪");
}
}
奔驰类,实现了车接口
public class BenChi implements Car {
@Override
public void name() {
System.out.println("奔驰");
}
}
宝马类,实现了车接口
public class BaoMa implements Car {
@Override
public void name() {
System.out.println("宝马");
}
}
车的工厂
public interface CarFactory {
public Car getCar();
}
奥迪车的工厂,实现了车工厂接口
public class AoDiFactory implements CarFactory {
@Override
public Car getCar() {
return new AoDi();
}
}
奔驰车的工厂,实现了车工厂接口
public class BenChiFactory implements CarFactory {
@Override
public Car getCar() {
return new BenChi();
}
}
宝马车的工厂,实现了车工厂接口
public class BaoMaFactory implements CarFactory {
@Override
public Car getCar() {
return new BaoMa();
}
}
测试
public class Main {
public static void main(String[] args) {
Car aoDi = new AoDiFactory().getCar();
Car benChi = new BenChiFactory().getCar();
Car baoMa = new BaoMaFactory().getCar();
aoDi.name();
benChi.name();
baoMa.name();
}
}
运行结果: