一天一模式 - 工厂方法模式

2024-01-16  本文已影响0人  engineer_tang

通过分析Spring源码解析设计模式的使用方法。下面看一个例子:

image.png

这里创建对象的接口是WebServer,其实现类TomcatWebServer、JettyWebServer、NettyWebServer,抽象工厂类是ServletWebServerFactory,其实现类包括JettyServletWebServerFactory、TomcatServletWebServerFactory、UndertowServletWebServerFactory。

1. 优点

2. 缺点

3. 测试例子

public interface Fruit {

    BigDecimal getWeight();

    String getName();
}


@NoArgsConstructor
@AllArgsConstructor
public class Apple implements Fruit {

    private BigDecimal weight;

    private String name;

    @Override
    public BigDecimal getWeight() {
        return this.weight;
    }

    @Override
    public String getName() {
        return this.name;
    }
}

@NoArgsConstructor
@AllArgsConstructor
public class Orange implements Fruit {

    private BigDecimal weight;

    private String name;

    @Override
    public BigDecimal getWeight() {
        return this.weight;
    }

    @Override
    public String getName() {
        return this.name;
    }
}

public interface TreeFacotry {

    Fruit produce();
}

public class AppleTreeFactory implements TreeFacotry {
    @Override
    public Fruit produce() {
        return new Apple(new BigDecimal("1.4"), "苹果");
    }
}

public class OrangeTreeFactory implements TreeFacotry {
    @Override
    public Fruit produce() {
        Orange orange = new Orange(new BigDecimal("2.3"), "橘子");
        return orange;
    }
}

public class FruitDemo {

    public static void main(String[] args) {
        TreeFacotry appleTreeFactory = new AppleTreeFactory();
        Fruit apple = appleTreeFactory.produce();
        System.out.println("apple weight: " + apple.getWeight() + ", apple name: " + apple.getName());
        TreeFacotry orangeTreeFactory = new OrangeTreeFactory();
        Fruit orange = orangeTreeFactory.produce();
        System.out.println("orange weight: " + orange.getWeight() + ", orange name: " + orange.getName());
    }
}

打印效果如下:


image.png
上一篇下一篇

猜你喜欢

热点阅读