在江苏中部泰州市有一个小城镇它叫泰兴,我们的主人公大维(Dav)就是这个县下面的一个街道。
我们的主人公大维家是一个开厂的小老板,另外他曾经是一个小包工头。Dav家里有点小钱,有钱人嘛就容易招花引蝶。
这不我们的Dav就出去约会了,约会呀是一门学问,你上去先把一串车钥匙拿出来,再吹吹牛b,就算你长的不怎么样,但是在金钱的buf下,妹子也会多看你一眼。
Dav为了在妹子面前炫富,需要买好几辆车,
Dav买车,肯定不需要只要车怎么制造,只要带上钱找卖车的4s店就可以了
首先我们看简单工厂模式
//汽车接口
interface Car{
String getName();//汽车品牌
};
//奔驰类
class Benz implements Car {
public String getName() {
return "我是奔驰,我要去祸害大波浪";
}
}
//宝马类
class BMW implements Car {
public String getName() {
return "我是宝马X6,你想坐在我的车里吗";
}
}
//既卖生产宝马又卖奔驰的店
class CarShopFactory{
public Car getCar(String name){
if (name.equals("BMW")){
return new BMW();
}else if (name.equals("benz")){
return new Benz();
}else {
System.out.println("不好意思,你要车太low,我们不卖");
return null;
}
}
}
// Dav用背包背了一袋子钱来买车了
public class DavBuyCar{
public static void main(String[] args){
CarShopFactory carShopFactory = new CarShopFactory();
Car car = carShopFactory.getCar("BMW");
System.out.println(car.getName());
}
}
现在假如Dav找了一个喜欢奥迪的女朋友,他又要去买奥迪,这个时候就要修改CarShopFactory加一个if else,假如过几天Dav又换了女朋友,要买法拉利怎么办?而且现实生活中我们的4S店也不会卖那么多品牌的车,怎么办?所以我们就创建多种4S店,如果有新的买车需求,我们只要新增4S店(工厂)即可
//定义一个工厂接口,功能就是生产汽车
interface Factory {
Car getCar();
}
// 宝马工厂
class BMWFactory1 implements Factory {
public Car getCar() {
return new BMW();
}
}
// 奔驰工厂
class BenzFactory1 implements Factory {
public Car getCar() {
return new Benz();
}
}
public class DavTest {
public static void main(String[] args) {
Factory bmwFactory = new BMWFactory1();
System.out.println(bmwFactory.getCar().getName());
Factory benzFactory = new BenzFactory1();
System.out.println(benzFactory.getCar().getName());
}
}
这个方法看着挺好,想要什么车新增一个LandRoverFactory即可,但是有一个缺点就是让我们的土财主Dav自己在选择各自的工厂,这个太麻烦了,我们Dav很懒惰的,从小养尊处优,你让他去自己选工厂他肯定会叫累,而且他们家是个土财主他是少爷,这种事情不是应该Dav说出要什么车,然后管家去做吗?所以抽象工厂诞生了
abstract class AbstractFactory{
protected abstract Car getCar();
}
// 奥迪工厂
class AudiFactory extends AbstractFactory{
protected Car getCar() {
return new Audio();
}
}
// 宝马工厂
class BMWFactory extends AbstractFactory{
protected Car getCar() {
return new BMW();
}
}
// 奔驰工厂
class BenzFactory extends AbstractFactory {
public Car getCar() {
return new Benz();
}
}