您好,登录后才能下订单哦!
模板方法模式(Template Method Pattern)是一种行为设计模式,它在一个方法中定义了一个算法的骨架,允许子类在不改变算法结构的情况下,重新定义某些步骤的具体内容。这种模式在Java中非常常见,因为它提供了一种灵活的方式来复用和扩展代码。
以下是在Java中实践模板方法模式的一个简单示例:
// 抽象类
public abstract class AbstractTemplate {
// 模板方法
public final void templateMethod() {
baseOperation1();
requiredOperations1();
hook1();
baseOperation2();
requiredOperations2();
hook2();
baseOperation3();
}
// 基本操作,子类必须实现
protected void baseOperation1() {
System.out.println("AbstractTemplate baseOperation1");
}
protected void baseOperation2() {
System.out.println("AbstractTemplate baseOperation2");
}
protected void baseOperation3() {
System.out.println("AbstractTemplate baseOperation3");
}
// 必须由子类实现的操作
protected abstract void requiredOperations1();
protected abstract void requiredOperations2();
// 可以由子类选择实现的操作
protected void hook1() {
}
protected void hook2() {
}
}
// 具体子类1
public class ConcreteClass1 extends AbstractTemplate {
@Override
protected void requiredOperations1() {
System.out.println("ConcreteClass1 requiredOperations1");
}
@Override
protected void requiredOperations2() {
System.out.println("ConcreteClass1 requiredOperations2");
}
}
// 具体子类2
public class ConcreteClass2 extends AbstractTemplate {
@Override
protected void requiredOperations1() {
System.out.println("ConcreteClass2 requiredOperations1");
}
@Override
protected void requiredOperations2() {
System.out.println("ConcreteClass2 requiredOperations2");
}
@Override
protected void hook1() {
System.out.println("ConcreteClass2 hook1");
}
}
// 测试类
public class Test {
public static void main(String[] args) {
AbstractTemplate template1 = new ConcreteClass1();
AbstractTemplate template2 = new ConcreteClass2();
template1.templateMethod();
System.out.println("-----------");
template2.templateMethod();
}
}
在这个示例中,AbstractTemplate
类定义了一个模板方法 templateMethod
,它包含了算法的骨架。baseOperation1
、baseOperation2
和 baseOperation3
是基本操作,子类必须实现它们。requiredOperations1
和 requiredOperations2
是必须由子类实现的操作。hook1
和 hook2
是可以由子类选择实现的操作。
ConcreteClass1
和 ConcreteClass2
是具体子类,它们分别实现了 requiredOperations1
和 requiredOperations2
方法,并可以选择性地实现 hook1
和 hook2
方法。
在 Test
类中,我们创建了两个具体子类的实例,并调用它们的 templateMethod
方法。可以看到,虽然两个子类实现了不同的操作,但它们都遵循了相同的算法骨架。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。