Java-23个设计模式 Factory Method 工厂模式

Factory Method

延迟类的实例化(支持变化,延迟到子类),解耦(new 后面的具体类)

① 创建基类,定义工厂方法所创建的对象的接口(这里生产电脑系统Linux和Computer)

/**
 * 工厂基类
 */
public abstract class SystemProductFactory {
    // 工厂方法
    abstract ComputerSystem createComputerSystem();
}

② 创建LinuxFactory,生产Linux的工厂

public class LinuxFactory extends SystemProductFactory{
    @Override
    public ComputerSystem createComputerSystem() {
        return new Linux();
    }
}

③ 创建具体类Linux

public class Linux extends ComputerSystem {
    @Override
    void run() {
        System.out.println("Linux");
    }
}

④ 真正实现依赖倒置原则

public class Main {
    private SystemProductFactory systemProductFactory;
    // 构造方法,传入一个工厂对象
    public Main(SystemProductFactory systemProductFactory){
        this.systemProductFactory = systemProductFactory;
    }
    public void run(){
        // 通过多态的形式接收,且通过接口的方式获取工厂,不会造成细节依赖,实现依赖倒置原则
        ComputerSystem system = systemProductFactory.createComputerSystem();
        system.run();
    }
}

⑤ 测试

public static void main(String[] args) {
        SystemProductFactory factory = new LinuxFactory();
        Main main = new Main(factory);
        main.run();
}

注意:Main(我不在乎别人,只在乎自己在编译过程中没有new的依赖。new的依赖不能消除,只能转换)

让Main依赖稳定的,而不是依赖变化的

场景:Factory Method模式用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体类型,紧耦合关系(new)会导致软件的脆弱

优点:通过面向对象的手法(多态),将所要创建的具体对象工作延迟到子类(继承),从而实现一种扩展(而非更改)的策略,较好地解决了这种紧耦合的关系。

缺点:解决 " 单个对象 " 的需求变化。但是在于要求创建方法/参数相同。 


版权声明:本文为weixin_42321815原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。