1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
from enum import Enum from abc import ABCMeta, abstractmethod
State = Enum('State', 'new running sleeping restart zombie')
class User: pass
class Process: pass
class File: pass
class Server(metaclass=ABCMeta):
@abstractmethod def __init__(self): pass
def __str__(self): return self.name
@abstractmethod def boot(self): pass
@abstractmethod def kill(self, restart=True): pass
class FileServer(Server):
def __init__(self): '''初始化文件服务进程要求的操作''' self.name = 'FileServer' self.state = State.new
def boot(self): print('booting the {}'.format(self)) '''启动文件服务进程要求的操作''' self.state = State.running
def kill(self, restart=True): print('Killing {}'.format(self)) '''杀死文件服务进程要求的操作''' self.state = State.restart if restart else State.zombie
def create_file(self, user, name, permissions): '''检查访问权限的有效性、用户权限,等等'''
print("trying to create the file '{}' for user '{}' with permissions {}".format(name, user, permissions))
class ProcessServer(Server):
def __init__(self): '''初始化进程服务进程要求的操作''' self.name = 'ProcessServer' self.state = State.new
def boot(self): print('booting the {}'.format(self)) '''启动进程服务进程要求的操作''' self.state = State.running
def kill(self, restart=True): print('Killing {}'.format(self)) '''杀死进程服务进程要求的操作''' self.state = State.restart if restart else State.zombie
def create_process(self, user, name): '''检查用户权限、生成PID,等等'''
print("trying to create the process '{}' for user '{}'".format(name, user))
class WindowServer: pass
class NetworkServer: pass
class OperatingSystem:
'''外观'''
def __init__(self): self.fs = FileServer() self.ps = ProcessServer()
def start(self): [i.boot() for i in (self.fs, self.ps)]
def create_file(self, user, name, permissions): return self.fs.create_file(user, name, permissions)
def create_process(self, user, name): return self.ps.create_process(user, name)
def main(): os = OperatingSystem() os.start() os.create_file('foo', 'hello', '-rw-r-r') os.create_process('bar', 'ls /tmp')
if __name__ == '__main__': main()
|