先说一下面向对象设计的基本原则:
OCP:开放原则,一个软件的实体应当对扩展开放,对修改关闭。
DIP:依赖倒转原则,针对接口编程,不要针对实现编程。
LoD:迪米特法则,只与直接相关的类通信,避免和陌生人通信。
在平常的编程中,我们都是直接new一个对象,而在工厂模式中,将对象的创建统一进行管理和控制,将调用者与实现类进行解耦。
下边是一个简单的示例代码:
public interface Car {
void run();
}
public class Andi implements Car {
@Override
public void run() {
System.out.println("andi在跑");
}
}
public class Byd implements Car{
@Override
public void run() {
System.out.println("byd在跑");
}
}
public class CarFactory{
//写法1
public static Car getCar(String type){
if("andi".equals(type)){
return new Andi();
}else if("byd".equals(type)){
return new Byd();
}
return null;
}
//写法2
public static Cat getAndi(){
return new Andi();
}
public static Car getByd(){
return new Byd();
}
}
以上简单工厂模式的实现,第二种是工厂方法模式的实现:
public interface CarFactory {
Car createCar();
}
public class AndiFactory implements CarFactory{
@Override
public Car createCar() {
return new Andi();
}
}
public class BydFactory implements CarFactory{
@Override
public Car createCar() {
return new Byd();
}
}
如果新增加一个Benc类的话:如下:
public class BencFactory implements CarFactory{
@Override
public Car createCar() {
return new Benc();
}
}
测试如下:
public static void main(String[] args) {
Car c1 = new AndiFactory().createCar();
Car c2 = new BydFactory().createCar();
c1.run();
c2.run();
}