这里直接上代码,然后给自己解释一下.
首先定义一个汽车的接口:
/**
*
- @author dch
*/
//定义一个汽车接口
public interface Car {
//定义一个汽车生产的方法(抽象方法)(因为这里是接口,都是抽象方法)
public void showInfo();
}
定义宝马汽车类(BMCar)和奥迪汽车类(ADCar)去实现接口
/*
*
- @author dch
*/
//宝马汽车类实现汽车的接口
public class BMcar implements Car{
@Override
//宝马汽车类重写接口的方法汽车是宝马汽车
public void showInfo() {
System.out.println("我们生产宝马汽车");
}
}
/**
*
*
- @author dch
*/
//奥迪汽车类实现汽车的接口
public class ADcar implements Car{
@Override
//奥迪汽车类重写接口的方法汽车是奥迪汽车
public void showInfo() {
// TODO Auto-generated method stub
System.out.println("我们生产奥迪汽车");
}
}
定义一个汽车工厂(CarFactory)的接口:
/**
*
- @author dch
*/
//定义一个汽车工厂接口
public interface CarFactory {
//生产汽车的方法
public Car produce();
}
定义宝马汽车工厂(BMCarFactory)类和奥迪汽车工厂(ADCarFactory)类去实现CarFactory接口:
/**
*
- @author dch
*/
//宝马汽车工厂类实现汽车工厂的接口
public class BMcarFactory implements CarFactory {
public Car produce() {
// TODO Auto-generated method stub
return new BMcar();
}
}
/**
*
- @author dch
*/
//定义一个奥迪汽车工厂实现汽车工厂的接口
public class ADcarFactory implements CarFactory{
public Car produce(){
return new ADcar();
}
}
测试类:
/**
*
- @author dch
*/
//测试类
public class Test {
public static void main(String[] args) {
//我们要生产一个汽车,先找工厂;
//又因为我们要生产奥迪汽车
//因此我们要找到奥迪工厂来生产
CarFactory factory = new ADcarFactory();
Car car = factory.produce();
car.showInfo();
CarFactory factory2 = new BMcarFactory();
Car car2 = factory2.produce();
car2.showInfo();
}
}
自我理解:
首先理解工厂模式的主要作用就是创建对象;
明白这一点我们就能知道宝马汽车工厂(BMarFactory)和奥迪汽车工厂(ADCarFactory)的工作
就是为了给我们创建一个与之对应的BMCar或者ADCar的对象,
因为没有对象我们就不能调用汽车的showInfo()方法,
说到这里我就能明白这个工厂模式用Carfactory作为接口,然后他的下面可以有很多不同牌子的工厂,
这样后期加工厂(也就是为了加对象)的时候不需要在原来的工厂代码里面添加代码,毕竟这违背了开闭原则(设计模式的基本原则),我们就可以直接定义XXCarFactory去实现CarFactory的方法,从而去创建了一个新的对象,然后去调用汽车showInfo()方法.
还有一个地方我自己需要理解的是:
public Car produce() {
// TODO Auto-generated method stub
return new BMcar();
}
因为我自己对这种引用类型的不熟悉的原因,所以还是提醒一下自己,
首先这个Car 可以写成 BMcar;
再者在写一个这,或许自己就能更明白:
这里在干嘛呢: Car bmcar = new BMcar();
BMcar bmcar = new BMcar();
自己又问到为啥不能这样写:
Car bmcar = new Car();
1.接口不能new,
2.实现接口的类有很多,就算这个式子成立,那这个对象算是调用哪个对象,
总不可能可以调用所有的对象,这样是不可能.(提示自己不要钻进去,等我们明白一下再添加)
通过这样:自己明白了这个工厂模式,可以通过汽车工厂这个接口去实现更多的XX汽车工厂得到对象
去实现car接口在XXcar的方法,
而这个方法是XXcar是实现car接口的方法
因此总结就是可以创建一个新的XXcar的对象去实现方法. 希望自己理解的差不多.