欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于一个quiz的思考

程序员文章站 2022-07-14 21:25:47
...

在今天的SC课上,老师提出了这样的一个问题:
基于一个quiz的思考
这个问题的BCD选项没有疑问,但是针对A选项,Template是否可以为interface,我们可以通过编写代码来进行验证:

public interface OrderProcessTemplate {
    //Template method
    default void processOrder() {
        doSelect();
        doPayment();
        giftWrap();
        doDelivery();
    }
    void doSelect();
    void doPayment();
    void giftWrap();
    void doDelivery();
}
public class NetOrder implements OrderProcessTemplate {
    @Override
    public void doSelect() {
        System.out.println("Net select.");
    }

    @Override
    public void doPayment() {
        System.out.println("Net payment");
    }

    @Override
    public void giftWrap() {
        System.out.println("Net gift wrap.");
    }

    @Override
    public void doDelivery() {
        System.out.println("Net delivery");
    }
}
public class StoreOrder implements OrderProcessTemplate {
    @Override
    public void doSelect() {
        System.out.println("Store select.");
    }

    @Override
    public void doPayment() {
        System.out.println("Store payment");
    }

    @Override
    public void giftWrap() {
        System.out.println("Store gift wrap.");
    }

    @Override
    public void doDelivery() {
        System.out.println("Store delivery");
    }
}

以下为Client调用:

public class Client {
    public static void main(String[] args) {
        OrderProcessTemplate orderProcess1 = new NetOrder();
        orderProcess1.processOrder();

        OrderProcessTemplate orderProcess2 = new StoreOrder();
        orderProcess2.processOrder();
    }
}

结果如下:
基于一个quiz的思考
可以发现,Template Pattern的实现中,我们也可以使用interface构造Template。

Oracle的Java8 Tutorial中有这样的内容:

Default methods enable you to add new functionality to the interfaces of your libraries and ensure binary compatibility with code written for older versions of those interfaces.

据此可知,interface的实现类中会自动地继承default方法。

相关标签: 软件构造