设计模式之template method模式(模板方法模式)

感冒了,一直流大鼻涕,扁桃体肿的跟个桃似的,脑袋晕晕的,非常难受,坚持学习。哦对,一直忘了说这一系列博客参考的书是《图解设计模式》。

模板方法模式,最突出的就是模板二字,肯定会想到接口或者抽象类之类的东西,定制一些标准,以便子类继承或实现,达到复用的目的。
接下来看书中对template method模式的解释:
组成模板的方法定义在父类中,这些方法是抽象方法,并没有规定做如何处理,交由子类实现,只知道这些方法在父类中如何被使用,也就是相当于父类定义了一些流程处理的框架,而框架的细节都需要字类自己定义。

来看示例,定义一个父类AbstractDisplay用于输出5次内容,该父类有抽象方法:open、close、print,以及普通方法display,该方法已定义完毕并不可进行修改:

public abstract class AbstractDisplay {  //抽象类
    public abstract void open();
    public abstract void print();
    public abstract void close();

    public final void display() {
        open();
        for(int i=0; i<5; ++i) {
            print();
        }
        close();
    }
}

接着我们按已经给定的父类实现两个类,分别用来展示字符和字符串:

public class CharDisplay extends AbstractDisplay {

    private char ch;

    public CharDisplay(char ch) {
        this.ch = ch;
    }

    public void setCh(char ch) {
        this.ch = ch;
    }

    public char getCh() {
        return this.ch;
    }

    @Override
    public void open() {
        System.out.println("charDisplay open");
    }

    @Override
    public void print() {
        System.out.println(ch);
    }

    @Override
    public void close() {
        System.out.println("charDisplay close");
    }
}
public class StringDisplay extends AbstractDisplay {

    private String string;

    public StringDisplay(String string) {
        this.string = string;
    }

    public void setString(String string) {
        this.string = string;
    }

    public String getString() {
        return this.string;
    }

    @Override
    public void open() {
        System.out.println("stringDisplay open");
    }

    @Override
    public void print() {
        System.out.println(string);
    }

    @Override
    public void close() {
        System.out.println("stringDisplay close");
    }
}

如上,继承的子类只是实现了父类要求实现的具体细节,整个输出流程还是掌握在父类手中,测试一下:

public class Main {
    public static void main(String[] args) {

        AbstractDisplay charDisplay = new CharDisplay('e');
        charDisplay.display();

        System.out.println();

        AbstractDisplay stringDisplay = new StringDisplay("hello");
        stringDisplay.display();
    }
}

运行结果:

charDisplay open
e
e
e
e
e
charDisplay close

stringDisplay open
hello
hello
hello
hello
hello
stringDisplay close

顶不住了,头晕,撩了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值