某天,小明想买车了,高高兴兴的去4S店买车,车辆的种类很多,小明就很迷糊,不知道买哪个品牌的汽车,好苦恼啊。 这时就需要4S工作人员来介绍各种车辆的信息了。
代码:(不使用工厂模式,实现4S工作人员)
public class Salesman {
public static void main(String arg[]){
System.out.println("你好, 需要我介绍什么车辆呢?");
Scanner sc= new Scanner(System.in);
String carname = sc.next();
if(carname.equals("奔驰") ){
Benz benz = new Benz();
benz.introduce();
}else if(carname.equals("宝马")){
Bmw bmw = new Bmw();
bmw.introduce();
}
}
}
class Benz{
public void introduce(){
System.out.println("奔驰好啊,奔驰棒");
}
}
class Bmw{
public void introduce(){
System.out.println("宝马那是好的很哦");
}
}
没有使用工程模式时,所以车类都是在Salesman 类中的main方法中去实例化,main方法相当于前端,那么就造成了前端与多个车类高度耦合的情况,前端需要去知道所以的车类,增加一个车类,就需要更改前端代码。这个就如同,我作为4S点的员工,我要知道每种车是如何生产(new)出来的。
代码:(使用工程模式,实现4S工作人员)
//车类接口
public interface Car {
public void introduce();
}
public class Benz implements Car{
@Override
public void introduce() {
// TODO Auto-generated method stub
System.out.println("我是奔驰");
}
}
public class Bmw implements Car{
@Override
public void introduce() {
// TODO Auto-generated method stub
System.out.println("我是宝马");
}
}
//车类工厂
public class CarFactory {
public Car getCar(String carName){
if(carName.equals("奔驰") ){
return new Benz();
}else if(carName.equals("宝马")){
return new Bmw();
}
return null;
}
}
//4S店工作人员
public class Salesman {
public static void main(String arg[]){
System.out.println("你好, 需要我介绍什么车辆呢?");
Scanner sc= new Scanner(System.in);
String carname = sc.next();
CarFactory carFactory=new CarFactory();
Car car=carFactory.getCar(carname);
car.introduce();
}
}
使用工程模式,前端与车类就解耦了,前端不用去知道所以车类,只需要知道车类工厂,增加新车类,也不用去更改前端代码,只需增加车类和改工厂类(利用java反射机制,可以优化工厂类)。现在,就如同我作为4S员工,我知道这个车类工厂建立了(new),我只需要从工厂中,获取到每种车类,我不需要去关心,这个车类是如何生产的(new)。