ADD file via upload

pull/1/head
pbr4nzfkh 9 months ago
parent eed0bd8fc0
commit 0e7f215a76

@ -0,0 +1,52 @@
# -*- 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
Loading…
Cancel
Save