测试简单工厂模式
没有使用简单工厂模式(带有类图)如下
package cn.com.simplefactory;
public interface Car {
void run();
}
class Audi implements Car {
@Override
public void run() {
System.out.println("奥迪在跑");
}
}
class Byd implements Car {
@Override
public void run() {
System.out.println("比亚迪在跑");
}
}
package cn.com.simplefactory;
public class Test1 { //调用者
public static void main(String[] args) {
//测试没有工厂模式的情况下
Car c1 = new Audi();
Car c2 = new Byd();
c1.run();
c2.run();
}
}
这里调用者Test1需要与接口和具体实现类都要直接联系
下面是使用了简单工厂模式(带有类图)如下
package cn.com.simplefactory;
public interface Car {
void run();
}
class Audi implements Car {
@Override
public void run() {
System.out.println("奥迪在跑");
}
}
class Byd implements Car {
@Override
public void run() {
System.out.println("比亚迪在跑");
}
}
工厂里有两种不同的方式实现
package cn.com.simplefactory;
public class CarFactory {
public static Car createCar(String name) {
if ("奥迪".equals(name)) {
return new Audi();
}else if ("比亚迪".equals(name)) {
return new Byd();
}else {
return null;
}
}
// public static Car createAudi() {
// return new Audi();
// }
// public static Car createByd() {
// return new Byd();
// }
}
package cn.com.simplefactory;
public class test2 {
//测试简单工厂模式
public static void main(String[] args) {
Car c1 = CarFactory.createCar("奥迪");
Car c2 = CarFactory.createCar("比亚迪");
c1.run();
c2.run();
}
}
这里的调用者test2就只与工厂和接口直接联系
总结:
简单工厂模式一般使用静态方法,通过接收参数的不同来返回不同的实例,缺点违反了开闭原则,对于增加新产品无能为力,就需要修改原有的代码,才能达到扩展的目的