定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
主要解决:一些方法通用,却在每一个子类都重新写了这一方法。
何时使用:有一些通用的方法。
如何解决:将这些通用算法抽象出来。
python实现
from abc import ABCMeta, abstractmethod
from time import sleep
class Windows(metaclass=ABCMeta):
@abstractmethod
def start(self):
pass
@abstractmethod
def repaint(self):
pass
@abstractmethod
def stop(self):
pass
def run(self):
self.start();
while True:
self.repaint()
sleep(10)
break
self.stop()
class MyWindows(Windows):
def __init__(self,msg):
self.msg = msg
def start(self):
print("窗口开始运行")
def stop(self):
print("窗口结束运行")
def repaint(self):
print("repaint "+self.msg)
MyWindows("hello").run()
dart 实现
abstract class Game {
void initialize();
void startPlay();
void endPlay();
void play() {
initialize();
startPlay();
endPlay();
}
}
class Cricket extends Game {
@override
void endPlay() {
// TODO: implement endPlay
print("endplaying");
}
@override
void initialize() {
// TODO: implement initialize
print("initialize");
}
@override
void startPlay() {
// TODO: implement startPlay
print("start game");
}
}
class FootBall extends Game {
@override
void endPlay() {
// TODO: implement endPlay
print("endplaying");
}
@override
void initialize() {
// TODO: implement initialize
print("initialize");
}
@override
void startPlay() {
// TODO: implement startPlay
print("startPlay");
}
}
void main(List<String> args) {
Game game = Cricket();
game.play();
game = FootBall();
game.play();
}