Skip to content

Commit 7b6e7dd

Browse files
committedOct 9, 2019
no message
1 parent 0869081 commit 7b6e7dd

3 files changed

+178
-0
lines changed
 

‎j2ee模式-前端控制器模式.py

+70
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# -*- coding: utf-8 -*-
2+
# @Author : ydf
3+
# @Time : 2019/10/9 0009 15:32
4+
5+
"""
6+
前端控制器模式(Front Controller Pattern)是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理。该处理程序可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。
7+
8+
前端控制器(Front Controller) - 处理应用程序所有类型请求的单个处理程序,应用程序可以是基于 web 的应用程序,也可以是基于桌面的应用程序。
9+
调度器(Dispatcher) - 前端控制器可能使用一个调度器对象来调度请求到相应的具体处理程序。
10+
视图(View) - 视图是为请求而创建的对象。
11+
12+
从java转化来,命名规范懒得改了。
13+
"""
14+
from abc import ABCMeta, abstractmethod
15+
from monkey_print2 import print
16+
17+
18+
class HomeView:
19+
def show(self):
20+
print('显示 Home 页面')
21+
22+
23+
class StudentView:
24+
def show(self):
25+
print('显示 Student 页面')
26+
27+
28+
class Dispatcher:
29+
def __init__(self):
30+
self.student_view = StudentView()
31+
self.home_view = HomeView()
32+
33+
def dispatch(self, request: str):
34+
if request.upper() == 'STUDENT':
35+
self.student_view.show()
36+
else:
37+
self.home_view.show()
38+
39+
40+
class FrontController:
41+
def __init__(self):
42+
self.__dispatcher = Dispatcher()
43+
44+
def is_authentic_user(self):
45+
print("用户鉴权成功")
46+
return True
47+
48+
def track_request(self, request):
49+
print("被请求页面: " + request)
50+
51+
def dispatch_request(self, request):
52+
self.track_request(request)
53+
if self.is_authentic_user():
54+
self.__dispatcher.dispatch(request)
55+
56+
57+
if __name__ == '__main__':
58+
front_controller = FrontController()
59+
front_controller.dispatch_request("HOME")
60+
front_controller.dispatch_request("STUDENT")
61+
62+
"""
63+
"D:/coding2/python36patterns/j2ee模式-前端控制器模式.py:49" 16:54:03 被请求页面: HOME
64+
"D:/coding2/python36patterns/j2ee模式-前端控制器模式.py:45" 16:54:03 用户鉴权成功
65+
"D:/coding2/python36patterns/j2ee模式-前端控制器模式.py:20" 16:54:03 显示 Home 页面
66+
"D:/coding2/python36patterns/j2ee模式-前端控制器模式.py:49" 16:54:03 被请求页面: STUDENT
67+
"D:/coding2/python36patterns/j2ee模式-前端控制器模式.py:45" 16:54:03 用户鉴权成功
68+
"D:/coding2/python36patterns/j2ee模式-前端控制器模式.py:25" 16:54:03 显示 Student 页面
69+
70+
"""
+101
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# -*- coding: utf-8 -*-
2+
# @Author : ydf
3+
# @Time : 2019/10/9 0009 15:32
4+
5+
"""
6+
前端控制器模式(Front Controller Pattern)是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理。该处理程序可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。
7+
8+
前端控制器(Front Controller) - 处理应用程序所有类型请求的单个处理程序,应用程序可以是基于 web 的应用程序,也可以是基于桌面的应用程序。
9+
调度器(Dispatcher) - 前端控制器可能使用一个调度器对象来调度请求到相应的具体处理程序。
10+
视图(View) - 视图是为请求而创建的对象。
11+
12+
从java转化来,命名规范懒得改了。
13+
"""
14+
from abc import ABCMeta, abstractmethod
15+
from monkey_print2 import print
16+
17+
18+
class Student:
19+
def __init__(self, name, roll_no):
20+
self.__name = name
21+
self.__roll_no = roll_no
22+
23+
def get_name(self):
24+
return self.__name
25+
26+
def set_name(self, name):
27+
self.__name = name
28+
29+
def get_roll_no(self):
30+
return self.__roll_no
31+
32+
def set_roll_no(self, roll_no):
33+
self.__roll_no = roll_no
34+
35+
36+
class AbstractStudentDao(metaclass=ABCMeta):
37+
@abstractmethod
38+
def get_all_students(self):
39+
pass
40+
41+
def get_student(self, roll_num):
42+
pass
43+
44+
def update_student(self, student: Student):
45+
pass
46+
47+
def delete_student(self, student: Student):
48+
pass
49+
50+
51+
class StudentDao(AbstractStudentDao):
52+
def __init__(self):
53+
self.students = []
54+
student1 = Student("小明", 0)
55+
student2 = Student("小黄", 1)
56+
self.students.append(student1)
57+
self.students.append(student2)
58+
59+
def get_all_students(self):
60+
return self.students
61+
62+
def get_student(self, roll_num):
63+
return self.students[roll_num]
64+
65+
def update_student(self, student: Student):
66+
# print(student.get_roll_no())
67+
# print(student.get_name())
68+
self.students[student.get_roll_no()].set_name(student.get_name())
69+
print("Student: RollNo " + str(student.get_roll_no())
70+
+ ", updated in the database")
71+
72+
def delete_student(self, student: Student):
73+
self.students.pop(student.get_roll_no())
74+
print("Student: Roll No " + str(student.get_roll_no())
75+
+ ", deleted from database")
76+
77+
78+
if __name__ == '__main__':
79+
80+
student_dao = StudentDao()
81+
82+
# // 输出所有的学生
83+
for student in student_dao.get_all_students():
84+
print("Student: [RollNo : " + str(student.get_roll_no()) + ", Name : " + student.get_name() + " ]")
85+
86+
# // 更新学生
87+
student = student_dao.get_all_students()[0]
88+
student.set_name("Michael")
89+
student_dao.update_student(student)
90+
91+
# // 获取学生
92+
student_dao.get_student(0)
93+
print("Student: [RollNo : "
94+
+ str(student.get_roll_no()) + ", Name : " + student.get_name() + " ]")
95+
96+
"""
97+
"D:/coding2/python36patterns/j2ee模式-数据访问对象模式.py:84" 17:38:06 Student: [RollNo : 0, Name : 小明 ]
98+
"D:/coding2/python36patterns/j2ee模式-数据访问对象模式.py:84" 17:38:06 Student: [RollNo : 1, Name : 小黄 ]
99+
"D:/coding2/python36patterns/j2ee模式-数据访问对象模式.py:70" 17:38:06 Student: RollNo 0, updated in the database
100+
"D:/coding2/python36patterns/j2ee模式-数据访问对象模式.py:94" 17:38:06 Student: [RollNo : 0, Name : Michael ]
101+
"""

‎j2ee模式-组合实体模式.py

+7
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,10 @@ def set_data(self, data1, data2):
7474

7575
client.set_data("Second Test", "Data2")
7676
client.print_data()
77+
78+
"""
79+
"D:/coding2/python36patterns/j2ee模式-组合实体模式.py:64" 16:31:51 Data: Test
80+
"D:/coding2/python36patterns/j2ee模式-组合实体模式.py:64" 16:31:51 Data: Data
81+
"D:/coding2/python36patterns/j2ee模式-组合实体模式.py:64" 16:31:51 Data: Second Test
82+
"D:/coding2/python36patterns/j2ee模式-组合实体模式.py:64" 16:31:51 Data: Data2
83+
"""

0 commit comments

Comments
 (0)
Please sign in to comment.