例子:选用一个单位用车的例子,单位中有各种车,跑车,巴士,货车等等。设计中加入抽象层次Auto类,以降低耦合度。各元素如下:

产品接口:Auto此接口用于描述各种具体的产品。

具体产品:Car,Bus,Truck。

静态工厂类:StaticFactory类中具有静态的工厂方法。

客户类:Client类调用静态工厂生产各种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());
    }
}

简单工厂模式的静态工厂类:

StaticFactory.java

public class StaticFactory{
    public static Auto createAuto(int autoId){
        switch(autoId){
            case 1:
                return new Car();
            case 2:
                return new Bus();
            case 3:
                return new Truck();
            default:
                throw new RuntimeException("没有这种车类型");
        }
    }
}

下面是客户端的程序:

Client.java

public class Client{
    public static void main(String[] args){
        Auto auto1=StaticFactory.createAuto(1);
        auto1.run();
        
        Auto auto2=StaticFactory.createAuto(2);
        auto2.run();
        
        Auto auto3=StaticFactory.createAuto(3);
        auto3.run();
        
        
    }
}

执行Client.java后结果为:

    启动轿车

    启动巴士

    启动卡车