擅长:python、mysql、java
<p>通过委托而不是子类化,在<code>__init__</code>方法中选择实现类来完成</p>
<pre><code>import sys
class ProgressPrinter:
def __init__(self, file=sys.stderr):
self._file = file
self.printer = ProgressPrinter.create(file)
def print_progress(self, message):
self.printer.print_progress(message)
@classmethod
def create(cls, file=sys.stderr):
if file.isatty():
return TTYProgressPrinter(file)
else:
return NoTTYProgressPrinter(file)
class TTYProgressPrinter:
def __init__(self, file):
self._file = file
def print_progress(self, message):
# Image some fancy stuff with ANSI escape codes.
pass
class NoTTYProgressPrinter:
def __init__(self, file):
self._file = file
def print_progress(self, message):
print(message, file=self._file)
</code></pre>