工厂模式_工厂方法模式

一、工厂方法模式 

为了避免简单工厂模式的缺点,不完全满足OCP。工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。

  1.1 车接口  

package edu.aeon.model.factory.factorymethod;
/**
 * [说明]:车类型接口
 * @author aeon(qq:1584875179)
 */
public interface Car {
    void run();
}

  1.2宝马类  

package edu.aeon.model.factory.factorymethod;
/**
 * [说明]:宝马类
 * @author aeon(qq:1584875179)
 *
 */
public class BMW implements Car {

    @Override
    public void run() {
        System.out.println("宝马在跑!");
    }

}

  1.3比亚迪类    

package edu.aeon.model.factory.factorymethod;
/**
 * [说明]:比亚迪类
 * @author aeon(qq:1584875179)
 *
 */
public class Byd implements Car {

    @Override
    public void run() {
        System.out.println("比亚迪在跑!");
    }

}

  1.4生产车的顶级接口  

package edu.aeon.model.factory.factorymethod;
/**
 * [说明]:生产车接口
 * @author aeon(qq:1584875179)
 *
 */
public interface CarFactory {
    Car createCar();
}

  1.5宝马工厂类    

package edu.aeon.model.factory.factorymethod;
/**
 * [说明]:生产宝马工厂类
 * @author aeon(qq:1584875179)
 *
 */
public class BMWFactory implements CarFactory {

    @Override
    public Car createCar() {
        return new BMW();
    }

}

  1.6 比亚迪工厂类    

package edu.aeon.model.factory.factorymethod;
/**
 * [说明]:比亚迪工厂类
 * @author aeon(qq:1584875179)
 *
 */
public class BydFactory implements CarFactory {

    @Override
    public Car createCar() {
        return new Byd();
    }

}

  1.7 工厂方法模式测试类    

package edu.aeon.model.factory.factorymethod;
/**
 * [说明]:工厂方法模式测试
 * @author aeon(qq:1584875179)
 *
 */
public class TestFactoryMethod {

    public static void main(String[] args) {
        Car car1=new BMWFactory().createCar();
        Car car2=new BydFactory().createCar();
        car1.run();
        car2.run();
    }

}

    测试结果截图:

    

    这样在以后业务扩展时,我们不需要修改原有代码,通过新添类来实现业务的扩展(增加),完全符合面向对象的程序设计规则(OCP原则),但是相应的曾加了很多类。

猜你喜欢

转载自www.cnblogs.com/aeon/p/10301817.html