A-A+
设计模式之工厂方法模式实例
工厂方法模式实例模型与上篇简单工厂模式相同,区别在于工厂方法模式对工厂也做了一层抽象,不同的工厂负责不同的产品生产。本例中,Auto的汽车抽象代码并没有改变,贴在下面:
Auto.java
- public abstract class Auto{
- private String name;//车型名称
- abstract public void run();//抽象的工作方法
- public String getName(){ //获得车型名称的方法
- return name;
- }
- public void setName(String name){ //设置车型的方法
- this.name=name;
- }
- }
以下是Auto的三个实现类:
Car.java
- public class Car extends Auto{
- public Car(){
- this.setName("轿车");
- }
- @Override
- public void run(){
- System.out.println("启动"+this.getName());
- }
- }
Bus.java
- public class Bus extends Auto{
- public Bus(){
- this.setName("巴士");
- }
- @Override
- public void run(){
- System.out.println("启动"+this.getName());
- }
- }
Truck.java
- public class Truck extends Auto{
- public Truck(){
- this.setName("卡车");
- }
- @Override
- public void run(){
- System.out.println("启动"+this.getName());
- }
- }
下面是工厂的抽象层次代码:
Factory.java
- public abstract class Factory{
- abstract public Auto createAuto();
- }
该抽象类功能:给具体的工厂实现提供一个抽象,这样客户端就可以依赖此抽象而不用依赖具体的工厂类。具体工厂实现类如下:
CarFactory.java
- public class CarFactory extends Factory{
- @Override
- public Auto createAuto(){
- return new Car();
- }
- }
BusFactory.java
- public class BusFactory extends Factory{
- @Override
- public Auto createAuto(){
- return new Bus();
- }
- }
TruckFactory.java
- public class TruckFactory extends Factory{
- @Override
- public Auto createAuto(){
- return new Truck();
- }
- }
客户端代码:
Client2.java
- public class Client2{
- public static void main(String[] args){
- Factory factory;
- Auto auto;
- factory=new CarFactory();
- auto=factory.createAuto();
- auto.run();
- factory=new BusFactory();
- auto=factory.createAuto();
- auto.run();
- factory=new TruckFactory();
- auto=factory.createAuto();
- auto.run();
- }
- }
运行结果如下:
启动轿车
启动巴士
启动卡车