Java设计模式(三):工厂方法模式

原创文章,转载请注明原文章地址,谢谢!

工厂方法模式 Factory Method Pattern

工厂方法模式和简单工厂模式比起来,它去掉了工厂类创建产品对象的方法的静态属性,如此集中在工厂类的压力,便可以由不同的子类来分担。

工厂方法模式的四个角色
  • 抽象产品,它是定义产品的接口,是具体产品的父类,是工厂创建的对象类型,在java中一般有抽象类或者接口来实现。
  • 具体产品,它实现了抽象产品接口,一种具体产品由专门的具体工厂创建,具体工厂和具体产品之间一一对应。
  • 抽象工厂,声明了工厂方法,用于返回一个产品。抽象工厂是工厂方法模式的核心,所有创建对象的工厂类都必须实现该接口。
  • 具体工厂,它是抽象工厂类的子类,实现了抽象工厂中定义的工厂方法,并可由客户端调用,返回一个具体产品类的实例。
示例

下面我们举一个汽车工厂生产汽车的例子。

  • 抽象产品类
public interface Vehicle {
    void run();
}
  • 具体产品类
public class C200L implements Vehicle {
    @Override
    public void run() {
        System.out.println("奔驰C级");
    }
}
public class B320 implements Vehicle {
    @Override
    public void run() {
        System.out.println("宝马320");
    }
}
  • 抽象工厂类
public interface VehicleFactory {
    /**
     * 生产机动车
     *
     * @return
     */
    Vehicle produce();
}
  • 具体工厂类
public class BenzFactory implements VehicleFactory {
    @Override
    public Vehicle produce() {
        return new C200L();
    }
}
public class BmwFactory implements VehicleFactory {
    @Override
    public Vehicle produce() {
        return new B320();
    }
}
  • 调用示例
public class FactoryMethodMain {
    public static void main(String[] args) {
        VehicleFactory benzFactory = new BenzFactory();
        Vehicle benz = benzFactory.produce();
        benz.run();
        VehicleFactory bmwFactory = new BmwFactory();
        Vehicle bmw = bmwFactory.produce();
        bmw.run();
    }
}
总结
  • 工厂方法模式和简单工厂模式相比,都是不需要客户端知道创建产品对象的细节。
  • 工厂方法模式体现了Java的多态特性,工厂角色和产品角色多态,工厂可以自主确定创建的产品对象。
  • 良好的扩展性,当需要生产一款新的产品,只需要添加一个具体工厂和具体产品即可,对客户端完全没有影响。但从某种角度讲,这也是一个缺点,当产品越来越多的时候,需要创建工厂类和产品类就越来越多。

博客内容仅供自已学习以及学习过程的记录,如有侵权,请联系我删除,谢谢!

你可能感兴趣的:(Java设计模式(三):工厂方法模式)