博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【设计模式】—— 模板方法Template
阅读量:6376 次
发布时间:2019-06-23

本文共 2323 字,大约阅读时间需要 7 分钟。

  前言:【】——————————by xingoo

  模式意图

  定义一个类的框架,当它有不同的类时,再具体实现。

  比如,我们设计一个跨系统的客户端软件,Windows需要一套展现类,Linux需要一套,mac还需要一套。这样,只需要抽取他们的共同操作编程一个框架类,具体使用到哪个系统时,再使用对应的类,有点像C++里面的模板。

  应用场景

  1 一次性实现一个类的不变部分,其他的部分留到子类实现。

  2 各个子类提取公共部分成为超类

  3 控制子类的扩展。

  模式结构

  AbstractClass 抽象类框架

abstract class AbstractClass{    public void action(){        step1();        step2();        newMethod();    }    abstract protected void step1();    abstract protected void step2();    abstract protected void newMethod();}

  Class 具体的子类,进行扩展

class Class1 extends AbstractClass{    protected void newMethod() {        System.out.println("class1 newMethod");    }    protected void step1() {        System.out.println("class1 step1");    }    protected void step2() {        System.out.println("class1 step2");    }}class Class2 extends AbstractClass{    protected void newMethod() {        System.out.println("class2 newMethod");    }    protected void step1() {        System.out.println("class2 step1");    }    protected void step2() {        System.out.println("class2 step2");    }}

  全部代码

1 package com.xingoo.test.design.template; 2 abstract class AbstractClass{ 3     public void action(){ 4         step1(); 5         step2(); 6         newMethod(); 7     } 8     abstract protected void step1(); 9     abstract protected void step2();10     abstract protected void newMethod();11 }12 class Class1 extends AbstractClass{13     protected void newMethod() {14         System.out.println("class1 newMethod");15     }16     protected void step1() {17         System.out.println("class1 step1");18     }19     protected void step2() {20         System.out.println("class1 step2");21     }22 }23 class Class2 extends AbstractClass{24     protected void newMethod() {25         System.out.println("class2 newMethod");26     }27     protected void step1() {28         System.out.println("class2 step1");29     }30     protected void step2() {31         System.out.println("class2 step2");32     }33 }34 public class Client {35     private static AbstractClass class1 = new Class1();36     private static AbstractClass class2 = new Class2();37     public static void main(String[] args) {38         class1.action();39         class2.action();40     }41 }
View Code

  运行结果

class1 step1class1 step2class1 newMethodclass2 step1class2 step2class2 newMethod

 

转载地址:http://uftqa.baihongyu.com/

你可能感兴趣的文章
基于 OSGi 的面向服务的组件编程,helloworld
查看>>
StoryBoard - Segue 简单笔记
查看>>
容器ConcurrentHashMap原理(学习)
查看>>
pl/sql程序块
查看>>
L122
查看>>
iOS中如何使cocoapods管理第三方库
查看>>
<%%>,<%:%> <%=%>的区别及使用(转载)
查看>>
2017四川省赛E题( Longest Increasing Subsequence)
查看>>
创建对象为什么要 init?
查看>>
个人收集:(转)display:inline-block
查看>>
nodejs+MQTT协议实现远程主机控制
查看>>
jQuery prop方法
查看>>
linux使用yum的方式安装mysql实践
查看>>
A1006. Sign In and Sign Out(25)
查看>>
w3c事件流 & ie事件流
查看>>
artDialog基本使用
查看>>
hdu - Problem 1175 连连看 【bfs】
查看>>
git 忽略文件
查看>>
HTTP、HTTP2.0、HTTPS、SPDY
查看>>
正向代理和反向代理
查看>>