0
点赞
收藏
分享

微信扫一扫

六、工厂方法模式

1.动机

2.实现

(1)车接口

我们要实现的类型

package com.example.demo.factory.method;

public interface Car {

    /**
     * 能跑
     */
    void run();


    /**
     * 能停
     */
    void stop();

}

(2)车工厂

生成车的抽象接口

package com.example.demo.factory.method;

public interface CarFactory {

    /**
     * 制造汽车
     * @return 汽车实例
     */
    Car createCar();

}

(3)别摸我车实例

package com.example.demo.factory.method.impl;

import com.example.demo.factory.method.Car;

public class BmwCar implements Car {

    // 实现

    @Override
    public void run() {
        System.out.println("BWM启动了");
    }

    @Override
    public void stop() {
        System.out.println("BMW停止了");
    }
}

(4)别摸我车工厂实现

package com.example.demo.factory.method.impl;

import com.example.demo.factory.method.Car;
import com.example.demo.factory.method.CarFactory;

public class BmwCarFactory implements CarFactory {
    @Override
    public Car createCar() {
        return new BmwCar();
    }
}

(5)客户端

package com.example.demo.factory.method;

import com.example.demo.factory.method.impl.BmwCarFactory;

public class Main {

    public static void main(String[] args) {
        // 这个往往可以用配置文件实现0依赖
        runCar(new BmwCarFactory());
    }

    /**
     * 这里可以理解为客户端
     * @param carFactory 汽车工厂
     */
    public static void runCar(CarFactory carFactory){
        Car car = carFactory.createCar();
        car.run();
    }

}

3.要点

  • 工厂方法模式主要用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体类型,紧耦合关系会导致软件的脆弱。
  • 工厂方法模式通过面向对象的手法,将所要创建的具体对象工作延迟到子类,从而实现一种扩展的策略,较好的解决了紧耦合关系
  • 工厂方法模式解决的是单个对象的需求变化,而抽象工厂解决的是一系列对象的需求变化,建造者模式解决的是复杂对象的部分需求变化
举报

相关推荐

0 条评论