实现四种模式，细节尚未完善