|  |  |  | @ -1,52 +0,0 @@ | 
			
		
	
		
			
				
					|  |  |  |  | # -*- encoding:utf-8 -*- | 
			
		
	
		
			
				
					|  |  |  |  | from cppy.cp_util import * | 
			
		
	
		
			
				
					|  |  |  |  | '''享元模式  享元模式是一种结构型设计模式,在享元模式中,对象被设计为可共享的,可以被多个上下文使用,而不必在每个上下文中都创建新的对象。 | 
			
		
	
		
			
				
					|  |  |  |  | 如果我们有大量不同的词频分析需求,有时需要词频前10的单词,有时需要词频前20的单词,有时还需要限定词汇的长度,那就需要创建多个词频统计器,每个词频统计器都独立创建并存储其内部状态, | 
			
		
	
		
			
				
					|  |  |  |  | 那么系统的内存占用可能会很大,在这种情况下,享元模式共享相同类型的词频统计器对象,每种类型的词频统计器只需创建一个共享实例,然后通过设置不同的参数个性化 | 
			
		
	
		
			
				
					|  |  |  |  | 每个对象,通过共享相同的内部状态,降低了对象的创建和内存占用成本。 | 
			
		
	
		
			
				
					|  |  |  |  | ''' | 
			
		
	
		
			
				
					|  |  |  |  | #以需要的词频数量分类 | 
			
		
	
		
			
				
					|  |  |  |  | # class Type(number): | 
			
		
	
		
			
				
					|  |  |  |  | def get_number(): | 
			
		
	
		
			
				
					|  |  |  |  |     number = int(input("请输入需要显示词频前几的单词")) | 
			
		
	
		
			
				
					|  |  |  |  |     return number | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #定义享元接口 | 
			
		
	
		
			
				
					|  |  |  |  | class WordFrequencyController(): | 
			
		
	
		
			
				
					|  |  |  |  |     def print_word_freqs(self,number): | 
			
		
	
		
			
				
					|  |  |  |  |         pass | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #定义具体的享元类 | 
			
		
	
		
			
				
					|  |  |  |  | class ConcreteWordFrequencyController(WordFrequencyController): | 
			
		
	
		
			
				
					|  |  |  |  |     def __init__(self, controllertype,filepath): | 
			
		
	
		
			
				
					|  |  |  |  |         self.word_list = extract_words(filepath) | 
			
		
	
		
			
				
					|  |  |  |  |         self.word_freq = get_frequencies(self.word_list) | 
			
		
	
		
			
				
					|  |  |  |  |         self.word_freq = sort_dict(self.word_freq) | 
			
		
	
		
			
				
					|  |  |  |  |     def print_word_freqs(self, number): | 
			
		
	
		
			
				
					|  |  |  |  |         for (w, c) in self.word_freq[:number]: | 
			
		
	
		
			
				
					|  |  |  |  |             print(w, '-', c) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #定义享元工厂 | 
			
		
	
		
			
				
					|  |  |  |  | class WordFrequencyControllerFactory(): | 
			
		
	
		
			
				
					|  |  |  |  |     def __init__(self): | 
			
		
	
		
			
				
					|  |  |  |  |         self.types = {} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     def get_WordFrequencyController(self, controller_type,testfilepath): | 
			
		
	
		
			
				
					|  |  |  |  |         if controller_type not in self.types: | 
			
		
	
		
			
				
					|  |  |  |  |             self.types[controller_type] = ConcreteWordFrequencyController(controller_type,testfilepath) | 
			
		
	
		
			
				
					|  |  |  |  |             #创建新的享元对象 | 
			
		
	
		
			
				
					|  |  |  |  |         print(self.types)#显示已存在的享元对象 | 
			
		
	
		
			
				
					|  |  |  |  |         return self.types[controller_type]#重复使用已存在的享元对象 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def process_command(factory: WordFrequencyControllerFactory, number: str): | 
			
		
	
		
			
				
					|  |  |  |  |     controller_type = number | 
			
		
	
		
			
				
					|  |  |  |  |     WordFrequencyController = factory.get_WordFrequencyController(controller_type,testfilepath) | 
			
		
	
		
			
				
					|  |  |  |  |     WordFrequencyController.print_word_freqs(int(number)) | 
			
		
	
		
			
				
					|  |  |  |  | if __name__ == "__main__": | 
			
		
	
		
			
				
					|  |  |  |  |     factory = WordFrequencyControllerFactory() | 
			
		
	
		
			
				
					|  |  |  |  |     while True: | 
			
		
	
		
			
				
					|  |  |  |  |         try: | 
			
		
	
		
			
				
					|  |  |  |  |             number = input("请输入需要显示词频前几的单词") | 
			
		
	
		
			
				
					|  |  |  |  |             process_command(factory, number) | 
			
		
	
		
			
				
					|  |  |  |  |         except EOFError: | 
			
		
	
		
			
				
					|  |  |  |  |             break |