土地主大维之工厂模式:简单工厂与抽象工厂模式

在江苏中部泰州市有一个小城镇它叫泰兴,我们的主人公大维(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();
    }
}

 

 

 

 


更多精彩内容