清洁代码38

master
zj3D 9 months ago
parent b04a404b3a
commit b1911ef9cb

@ -1,18 +1,13 @@
# -*- encoding:utf-8 -*-
from cppy.cp_util import *
''' '''
享元模式 享元模式是一种结构型设计模式在享元模式对象被设计为可共享的可以被多个上下文使用而不必在每个上下文中都创建新的对象 享元模式中对象被设计为可共享的被多个上下文使用而不必在每个上下文中都创建新的对象
如果我们有大量不同的词频分析需求有时需要词频前10的单词有时需要词频前20的单词有时还需要限定词汇的长度那就需要创建多个词频统计器每个词频统 如果我们有大量不同的词频分析需求有时需要词频前10的单词有时需要词频前20的单词有时还需要限定词汇的长度那就需要创建多个词频统计器每个词频统
计器都独立创建并存储其内部状态那么系统的内存占用可能会很大在这种情况下享元模式共享相同类型的词频统计器对象每种类型的词频统计器只需创建一个 计器都独立创建并存储其内部状态在这种情况下享元模式共享相同类型的词频统计器对象只需创建一个共享实例然后通过设置不同的参数个性化每个对象通过共享相同的内部状态降低了对象的创建和内存占用成本
共享实例然后通过设置不同的参数个性化每个对象通过共享相同的内部状态降低了对象的创建和内存占用成本
例如我需要对3个文件获取词频前十的单词对另外3个文件获取词频前二十的单词那么我只需要创建2个词频统计器对象每个对象存储相同的内部状态一个对象 例如我需要对3个文件获取词频前十的单词对另外3个文件获取词频前二十的单词那么我只需要创建2个词频统计器对象每个对象存储相同的内部状态一个对象
获取前十的单词一个对象获取前二十的单词而不用创建6个对象 获取前十的单词一个对象获取前二十的单词而不用创建6个对象
''' '''
#以需要的词频数量分类
# class Type(number): from cppy.cp_util import *
def get_number():
number = int(input("请输入需要显示词频前几的单词"))
return number
#定义享元接口 #定义享元接口
class WordFrequencyController(): class WordFrequencyController():
@ -37,8 +32,7 @@ class WordFrequencyControllerFactory():
def get_WordFrequencyController(self, controller_type,testfilepath): def get_WordFrequencyController(self, controller_type,testfilepath):
if controller_type not in self.types: if controller_type not in self.types:
self.types[controller_type] = ConcreteWordFrequencyController(controller_type,testfilepath) self.types[controller_type] = ConcreteWordFrequencyController(controller_type,testfilepath)
#创建新的享元对象 #创建新的享元对象
print(self.types)#显示已存在的享元对象
return self.types[controller_type]#重复使用已存在的享元对象 return self.types[controller_type]#重复使用已存在的享元对象
def process_command(factory: WordFrequencyControllerFactory, number: str): def process_command(factory: WordFrequencyControllerFactory, number: str):

Loading…
Cancel
Save