def __new__(cls, identity):
     """
     假设相同的学号只会有1个学生
     :param identity:
     :return:
     """
     obj = cls.pool.get(identity, None)
     if not obj:
         obj = object.__new__(cls)
         print(f'实例化 学号为 {identity} 的学生')
         cls.pool[identity] = obj
     return obj
def main():
    sample_queue = Queue()
    sample_queue.put('yam')
    with QueueObject(sample_queue) as obj:
        print('Inside with: {}'.format(obj))
    print('Outside with: {}'.format(sample_queue.get()))

    sample_queue.put('sam')
    queue_object = QueueObject(sample_queue, True)
    print('内部 func: {}'.format(queue_object.object))
    print('外部 func: {}'.format(sample_queue.get()))

    if not sample_queue.empty():
        print(sample_queue.get())
            def __cached_function_result_for_a_time(*args, **kwargs):
                # print(cls.func_result_dict)
                # if len(cls.func_result_dict) > 1024:
                if sys.getsizeof(cls.func_result_dict) > 100 * 1000 * 1000:
                    cls.func_result_dict.clear()

                key = cls._make_arguments_to_key(args, kwargs)
                if (fun, key) in cls.func_result_dict and time.time(
                ) - cls.func_result_dict[(fun, key)][1] < cache_time:
                    return cls.func_result_dict[(fun, key)][0]
                else:
                    print('函数 [{}] 此次不能使用缓存'.format(fun.__name__))
                    result = fun(*args, **kwargs)
                    cls.func_result_dict[(fun, key)] = (result, time.time())
                    return result
 def build(self, build_type):
     if build_type == "House":
         director = Director()
         builder = HouseBuilder()
         director.builder = builder
         director.construct_building()
         building = director.get_building()
         print(building)
     else:
         director = Director()
         builder = FlatBuilder()
         director.builder = builder
         director.construct_building()
         building = director.get_building()
         print(building)
示例#5
0
    def __new__(cls, identity):
        """
        假设相同的学号只会有1个学生
        :param identity:
        :return:

        这个是享元模式,有人一看到重写 __new__就条件反射神经过敏,但凡是重写了__new__的代码他都认为是单例模式。
        主要是没有掌握类的一些概念的本质,死记硬背形式造成的错误认知。
        最起码要知道__new__是干啥,__init__是干啥,不知道的话就会死记硬背单例模式的形式。
        """
        obj = cls.pool.get(identity, None)
        if not obj:
            obj = object.__new__(cls)
            print(f'实例化 学号为 {identity} 的学生')
            cls.pool[identity] = obj
        return obj
 def operation1(self):
     print("My Concrete Operation1")
 def operation3(self):
     print('操作3')
 def process(self):
     print("fault")
 def __init__(self, a, b):
     print(f'初始化 {a},{b}')
示例#10
0
 def show(self):
     print('显示 Home 页面')
示例#11
0
 def f1(self):
     print("before run f1")
     self._decoratee.f1()
     print("after run f1")
示例#12
0
 def f2(self):
     print("original f2")
示例#13
0
 def f1(self):
     print("original f1")
 def display(self, depth):
     print('-' * depth + self.name)
 def line_of_duty(self):  # 履行职责
     print('%s\t员工招聘培训管理' % self.name)
    def display(self, depth):
        print('-' * depth + self.name)

        for component in self.childrenCompany:
            component.display(depth + 2)
 def print_data(self):
     for data in self.compositeEntity.get_data():
         print(f'Data: {data}')
示例#18
0
 def show(self):
     print('显示 Student 页面')
 def send_msg(self):
     print(f'用 {self.phone_name} 发短信')
示例#20
0
 def is_authentic_user(self):
     print("用户鉴权成功")
     return True
示例#21
0
            obj = object.__new__(cls)
            print(f'实例化 学号为 {identity} 的学生')
            cls.pool[identity] = obj
        return obj

    def __init__(self, identity):
        self.identity = identity

    def eat(self):
        print(f'{self.identity} 吃饭')


if __name__ == '__main__':
    A('001').eat()
    A('001').eat()
    A('002').eat()

    # 下面是关于这个享元模式被人说成是单例模式的反驳。如果是单例模式print(id(A('001')) == id(A('002'))) 结果会是True
    print(id(A('001')) == id(A('002')))  # False
    print(id(A('001')) == id(A('001')))  # True
    """
    不会多次生成 001学号的同学这个对象。
    "D:/coding2/python36patterns/创建型模式-享元模式.py:30"  11:46:53  实例化 学号为 001 的学生
    "D:/coding2/python36patterns/创建型模式-享元模式.py:38"  11:46:53  001 吃饭
    "D:/coding2/python36patterns/创建型模式-享元模式.py:38"  11:46:53  001 吃饭
    "D:/coding2/python36patterns/创建型模式-享元模式.py:30"  11:46:53  实例化 学号为 002 的学生
    "D:/coding2/python36patterns/创建型模式-享元模式.py:38"  11:46:53  002 吃饭
    "D:/coding2/python36patterns/创建型模式-享元模式.py:45"  11:46:53  False
    "D:/coding2/python36patterns/创建型模式-享元模式.py:46"  11:46:53  True
    """
示例#22
0
 def track_request(self, request):
     print("被请求页面: " + request)
示例#23
0
 def eat(self):
     print(f'{self.identity} 吃饭')
示例#24
0
        print("Student: RollNo " + str(student.get_roll_no())
              + ", updated in the database")

    def delete_student(self, student: Student):
        self.students.pop(student.get_roll_no())
        print("Student: Roll No " + str(student.get_roll_no())
              + ", deleted from database")


if __name__ == '__main__':

    student_dao = StudentDao()

    # // 输出所有的学生
    for student in student_dao.get_all_students():
        print("Student: [RollNo : " + str(student.get_roll_no()) + ", Name : " + student.get_name() + " ]")

    # // 更新学生
    student = student_dao.get_all_students()[0]
    student.set_name("Michael")
    student_dao.update_student(student)

    # // 获取学生
    student_dao.get_student(0)
    print("Student: [RollNo : "
          + str(student.get_roll_no()) + ", Name : " + student.get_name() + " ]")

    """
    "D:/coding2/python36patterns/j2ee模式-数据访问对象模式.py:84"  17:38:06  Student: [RollNo : 0, Name : 小明 ]
"D:/coding2/python36patterns/j2ee模式-数据访问对象模式.py:84"  17:38:06  Student: [RollNo : 1, Name : 小黄 ]
"D:/coding2/python36patterns/j2ee模式-数据访问对象模式.py:70"  17:38:06  Student: RollNo 0, updated in the database
 def process(self):
     print("normal")
示例#26
0
 def update_student(self, student: Student):
     # print(student.get_roll_no())
     # print(student.get_name())
     self.students[student.get_roll_no()].set_name(student.get_name())
     print("Student: RollNo " + str(student.get_roll_no())
           + ", updated in the database")
 def template_method(self):
     print("Defining the Algorithm.Operation1 follows Operation2")
     self.operation2()
     self.operation1()
     self.operation3()
示例#28
0
 def delete_student(self, student: Student):
     self.students.pop(student.get_roll_no())
     print("Student: Roll No " + str(student.get_roll_no())
           + ", deleted from database")
 def operation2(self):
     print("Operation 2 remains same")
 def __get__(self, obj, cls):
     print(obj, cls)
     if obj is None:
         return self
     value = obj.__dict__[self.func.__name__] = self.func(obj)
     return value