简单工厂之汽车制造

简单工厂模式解析
简单工厂模式是创建型模式中工厂模式的最基本模式,通过简单工厂模式我们可以理解设计模式是如何提高程序的可维护性和可扩展性的。
简单工厂之美在于他的简单,在于他工业化之美、流水化生产之美,就像由农业化社会的手工业者的生产模式到工厂工业化生产所给人心理上的震撼感。
下面我们以生产汽车为例,开始我们的模式之旅。
假设我是一个野心勃勃的创业者,我们投资兴建了一个生产QQ小汽车的工厂。
public class QQcar{
private color;//汽车颜色
private lenght; //汽车长度
...
public run(){...}//汽车启动行使
...
}
//生产一辆QQ车
QQcar QQcar1=new QQcar();
QQcar1.run();
由于我们的小汽车经济实惠,所以销路非常好。但是有些客户提出能否生产马力更大、车型更大的小汽车,价格可以高一些。我们决定在保留原QQ车型的基础上生产更多的型号的小汽车,比如夏利、吉利等。我们把原有QQ车型中的基本技术保留下来,抽象成我们生产其他车型的基础。在各个车型生产中,有不同的技术。
public class Car{
private color;//汽车颜色
public run(){...}//汽车启动行使
...
}
public class QQcar extends Car{   //QQ
...
public run(){...}//QQ汽车启动行使
...
}
public class XLcar extends Car{   //夏利
...
public run(){...}//夏利汽车启动行使方式
...
}
... ...

但现在我们只有一套车间设备,所以在生产具体车型时必须告诉工厂生产什么型号的车,以便工厂进行设备调整。
public class Factory{
public Car makecar(String cartype){//根据不同型号,生产汽车
      if(cartype=="QQ"){return new QQcar();}
      else if(cartype=="夏利"){return new XLcar();}
      ...
       }
}
当客户需要QQ时
Factory myFactory=new Factory();
Car  car1=myFactory.makecar("QQ");
car1.run();   //新车开走
当客户需要夏利时
Car  car2=myFactory.makecar("夏利");
car2.run();   //夏利开走
... ...
这样我们如果还要增加新车型,只要增加一个新类,同时增加工厂中新型号的判断逻辑,就可以生产新车型了。
随着车型不断增加,我们的一个车间明显不能满足要求了,最后我们决定购进新设备,建造新车间,每个车间只生产一个型号的车型,这样避免了设备的不断调整。
这就超出了简单工厂的范围,我们要进入工厂方法模式了。

 
### 简单工厂模式在汽车案例中的应用 简单工厂模式是一种常用的创建设计模式,其核心思想是通过一个专门的工厂类来负责对象的创建过程。以下是基于汽车案例的具体实现。 #### 工厂接口与具体产品类的设计 为了模拟不同品牌的汽车生产流程,可以定义一个通用的 `Car` 接口以及多个具体的实现类(如 `Toyota`, `BMW`, 和 `Tesla`),分别代表不同的品牌车辆。 ```java // Car.java (公共接口) public interface Car { void showBrand(); // 显示汽车品牌的方法 } // Toyota.java (具体产品类之一) public class Toyota implements Car { @Override public void showBrand() { System.out.println("This is a Toyota car."); } } // BMW.java (具体产品类之二) public class BMW implements Car { @Override public void showBrand() { System.out.println("This is a BMW car."); } } // Tesla.java (具体产品类之三) public class Tesla implements Car { @Override public void showBrand() { System.out.println("This is a Tesla car."); } } ``` 以上代码展示了如何抽象一个统一的产品接口 `Car` 并提供多种具体实现方式[^2]。 #### 创建工厂类 接下来构建一个简单工厂类用于根据输入参数动态返回对应类型的汽车实例: ```java // SimpleCarFactory.java (工厂类) public class SimpleCarFactory { /** * 静态方法依据传入的品牌名称生成对应的汽车对象。 * * @param brand 品牌名字符串 ("toyota", "bmw", 或者 "tesla") * @return 返回指定品牌的汽车实例 */ public static Car createCar(String brand) { switch (brand.toLowerCase()) { case "toyota": return new Toyota(); case "bmw": return new BMW(); case "tesla": return new Tesla(); default: throw new IllegalArgumentException("Unknown car brand: " + brand); } } } ``` 此部分实现了关键逻辑——将复杂的对象创建细节隐藏于单一入口之下,从而简化客户端调用复杂度的同时也增强了系统的可维护性和扩展性[^3]。 #### 测试程序 最后编写一段测试代码验证上述机制是否正常工作: ```java public class MainApp { public static void main(String[] args) { String desiredBrand = "bmw"; // 可更改为你想要生产的任何品牌 try { Car myDreamCar = SimpleCarFactory.createCar(desiredBrand); myDreamCar.showBrand(); } catch(IllegalArgumentException e){ System.err.println(e.getMessage()); } } } ``` 运行该应用程序将会打印所选车型的信息消息:“This is a BMW car.” 如果尝试请求不存在的品牌,则抛异常提示错误信息[^4]。 --- ### 总结说明 本示例清晰地展现了简单工厂模式的应用价值及其基本构成要素:一是定义了一组共享相同行为特征的对象;二是引入独立模块完成这些对象的实际制造任务。这种方式不仅提高了代码重用率还降低了耦合程度,在实际项目开发中有广泛用途[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值