设计模式工厂模式案例_第1页
设计模式工厂模式案例_第2页
设计模式工厂模式案例_第3页
设计模式工厂模式案例_第4页
设计模式工厂模式案例_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设计模式工厂模式案例《设计模式工厂模式案例》篇一工厂模式是一种创建型设计模式,它提供了一种创建对象的方法,使得创建对象的过程对客户端透明。在工厂模式中,客户端只需要指定它想要创建的对象的类型,而工厂类则负责实际创建该对象。工厂模式的关键在于它解耦了对象的创建过程与其具体实现,使得系统更加灵活和易于扩展。○案例概述在我们的案例中,我们将设计一个汽车制造工厂,这个工厂能够根据客户的需求生产不同类型的汽车。我们将实现一个抽象的汽车工厂,它定义了一个生产汽车的方法,然后我们创建具体的汽车工厂子类,每个子类负责生产特定类型的汽车。○设计类图```++++++|CarFactory||ToyotaFactory||HondaFactory||||||||createCar()||createCar()||createCar()|||||||++++++```○抽象工厂类(CarFactory)```javapublicabstractclassCarFactory{publicabstractCarcreateCar(Stringtype);}```○具体工厂子类(ToyotaFactory)```javapublicclassToyotaFactoryextendsCarFactory{@OverridepublicCarcreateCar(Stringtype){if(type.equals("sedan")){returnnewToyotaCamry();}elseif(type.equals("suv")){returnnewToyotaRav4();}else{thrownewIllegalArgumentException("Unrecognizedcartype:"+type);}}}```○另一个具体工厂子类(HondaFactory)```javapublicclassHondaFactoryextendsCarFactory{@OverridepublicCarcreateCar(Stringtype){if(type.equals("sedan")){returnnewHondaAccord();}elseif(type.equals("suv")){returnnewHondaCRV();}else{thrownewIllegalArgumentException("Unrecognizedcartype:"+type);}}}```○汽车接口(Car)```javapublicinterfaceCar{voidstart();voidstop();}```○具体汽车实现(ToyotaCamry)```javapublicclassToyotaCamryimplementsCar{@Overridepublicvoidstart(){System.out.println("ToyotaCamrystarted.");}@Overridepublicvoidstop(){System.out.println("ToyotaCamrystopped.");}}```○另一个具体汽车实现(HondaAccord)```javapublicclassHondaAccordimplementsCar{@Overridepublicvoidstart(){System.out.println("HondaAccordstarted.");}@Overridepublicvoidstop(){System.out.println("HondaAccordstopped.");}}```○使用工厂模式```javapublicclassFactoryPatternDemo{publicstaticvoidmain(String[]args){CarFactorytoyotaFactory=newToyotaFactory();CarFactoryhondaFactory=newHondaFactory();CartoyotaSedan=toyotaFactory.createCar("sedan");toyotaSedan.start();toyotaSedan.stop();CarhondaSedan=hondaFactory.createCar("sedan");hondaSedan.start();hondaSedan.stop();}}```在这个案例中,`CarFactory`是一个抽象工厂,它定义了创建汽车的方法`createCar()`。`ToyotaFactory`和`HondaFactory`是具体工厂,它们分别实现了`createCar()`方法,用于创建特定的汽车类型。客户端只需要通过工厂接口来获取他们所需的汽车对象,而不需要关心汽车的创建细节。工厂模式在软件开发中非常常见,它适用于创建对象的过程复杂或者需要根据不同条件来创建《设计模式工厂模式案例》篇二工厂模式是一种设计模式,它提供了一种创建对象的方法,使得创建对象的过程可以被抽象和隔离。在工厂模式中,我们创建一个抽象的工厂类,它包含一个创建产品的抽象方法,而具体的创建过程则由子类来负责。这样,客户端只需要关心如何获取产品,而不需要关心产品的具体实现。○工厂模式的优势-封装性:工厂模式将产品的创建过程封装在一个单独的工厂类中,使得客户端不需要关心产品的具体实现。-可扩展性:当需要增加新的产品时,只需要添加一个新的工厂子类,而不需要修改现有的代码。-解耦:客户端与具体的产品实现解耦,使得系统更加灵活和可维护。○工厂模式的结构工厂模式通常包含以下几个角色:-`Product`:抽象产品角色,定义了产品的公共接口。-`ConcreteProduct`:具体产品角色,实现了`Product`接口,是工厂方法创建的对象。-`Factory`:抽象工厂角色,它定义了一个创建产品的接口,包含一个创建产品的抽象方法。-`ConcreteFactory`:具体工厂角色,它实现了`Factory`接口,并提供了具体产品的创建方法。○工厂模式的案例○汽车制造工厂假设我们有一个汽车制造工厂,我们想要创建不同类型的汽车,如轿车、SUV和跑车。每种汽车都有不同的属性和行为,但它们都继承自一个抽象的汽车类。```java//产品角色-抽象汽车publicabstractclassCar{publicabstractvoidstart();publicabstractvoidstop();}//具体产品角色-轿车publicclassSedanextendsCar{@Overridepublicvoidstart(){System.out.println("Sedanstarted.");}@Overridepublicvoidstop(){System.out.println("Sedanstopped.");}}//具体产品角色-SUVpublicclassSuvextendsCar{@Overridepublicvoidstart(){System.out.println("SUVstarted.");}@Overridepublicvoidstop(){System.out.println("SUVstopped.");}}//产品角色-跑车publicclassSportsCarextendsCar{@Overridepublicvoidstart(){System.out.println("SportsCarstarted.");}@Overridepublicvoidstop(){System.out.println("SportsCarstopped.");}}//抽象工厂角色publicinterfaceCarFactory{CarcreateCar();}//具体工厂角色-国内工厂publicclassDomesticCarFactoryimplementsCarFactory{@OverridepublicCarcreateCar(){returnnewSedan();}}//具体工厂角色-国外工厂publicclassOverseasCarFactoryimplementsCarFactory{@OverridepublicCarcreateCar(){returnnewSportsCar();}}//客户端代码publicclassClient{publicstaticvoidmain(String[]args){CarFactoryfactory=newDomesticCarFactory();Carcar=factory.createCar();car.start();car.stop();}}```在这个案例中,`Car`是抽象产品角色,`Sedan`、`SUV`和`SportsCar`是具体产品角色

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论