Skip to content

Commit 0869081

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

4 files changed

+285
-0
lines changed
 

‎j2ee模式-业务代表模式.py

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# -*- coding: utf-8 -*-
2+
# @Author : ydf
3+
# @Time : 2019/10/9 0009 15:32
4+
5+
"""
6+
业务代表模式(Business Delegate Pattern)用于对表示层和业务层解耦。它基本上是用来减少通信或对表示层代码中的业务层代码的远程查询功能。在业务层中我们有以下实体。
7+
8+
客户端(Client) - 表示层代码可以是 JSP、servlet 或 UI java 代码。
9+
业务代表(Business Delegate) - 一个为客户端实体提供的入口类,它提供了对业务服务方法的访问。
10+
查询服务(LookUp Service) - 查找服务对象负责获取相关的业务实现,并提供业务对象对业务代表对象的访问。
11+
业务服务(Business Service) - 业务服务接口。实现了该业务服务的实体类,提供了实际的业务实现逻辑。
12+
13+
从java转化来,命名规范懒得改了。
14+
"""
15+
from abc import ABCMeta, abstractmethod
16+
from monkey_print2 import print
17+
18+
19+
class AbstractBusinessService(metaclass=ABCMeta):
20+
@abstractmethod
21+
def doProcessing(self):
22+
pass
23+
24+
25+
class EJBService(AbstractBusinessService):
26+
def doProcessing(self):
27+
print("Processing task by invoking EJB Service")
28+
29+
30+
class JMSService(AbstractBusinessService):
31+
def doProcessing(self):
32+
print("Processing task by invoking JMS Service")
33+
34+
35+
def getBusinessService(serviceType: str):
36+
if serviceType.upper() == 'EJB':
37+
return EJBService()
38+
else:
39+
return JMSService()
40+
41+
42+
class BusinessDelegate:
43+
def __init__(self):
44+
self.__businessService = None
45+
self.__serviceType = None
46+
47+
def setServiceType(self, serviceType):
48+
self.__serviceType = serviceType
49+
50+
def doTask(self):
51+
businessService = getBusinessService(self.__serviceType)
52+
businessService.doProcessing()
53+
54+
55+
class Client:
56+
def __init__(self, businessService: BusinessDelegate):
57+
self.businessService = businessService
58+
59+
def doTask(self):
60+
self.businessService.doTask()
61+
62+
63+
if __name__ == '__main__':
64+
businessDelegate = BusinessDelegate()
65+
businessDelegate.setServiceType("EJB")
66+
67+
client = Client(businessDelegate)
68+
client.doTask()
69+
70+
businessDelegate.setServiceType("JMS")
71+
client.doTask()
72+
73+
"""
74+
"D:/coding2/python36patterns/j2ee模式-业务代表模式.py:25" 16:07:31 Processing task by invoking EJB Service
75+
"D:/coding2/python36patterns/j2ee模式-业务代表模式.py:31" 16:07:31 Processing task by invoking JMS Service
76+
"""

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

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
"""
2+
组合实体模式(Composite Entity Pattern)用在 EJB 持久化机制中。一个组合实体是一个 EJB 实体 bean,代表了对象的图解。当更新一个组合实体时,内部依赖对象 beans 会自动更新,因为它们是由 EJB 实体 bean 管理的。以下是组合实体 bean 的参与者。
3+
4+
组合实体(Composite Entity) - 它是主要的实体 bean。它可以是粗粒的,或者可以包含一个粗粒度对象,用于持续生命周期。
5+
粗粒度对象(Coarse-Grained Object) - 该对象包含依赖对象。它有自己的生命周期,也能管理依赖对象的生命周期。
6+
依赖对象(Dependent Object) - 依赖对象是一个持续生命周期依赖于粗粒度对象的对象。
7+
策略(Strategies) - 策略表示如何实现组合实体。
8+
"""
9+
from monkey_print2 import print
10+
11+
12+
class DependentObject1:
13+
def __init__(self):
14+
self.__data = None
15+
16+
def get_data(self):
17+
return self.__data
18+
19+
def set_data(self, data):
20+
self.__data = data
21+
22+
23+
class DependentObject2:
24+
def __init__(self):
25+
self.__data = None
26+
27+
def get_data(self):
28+
return self.__data
29+
30+
def set_data(self, data):
31+
self.__data = data
32+
33+
34+
class CoarseGrainedObject:
35+
def __init__(self):
36+
self.do1 = DependentObject1()
37+
self.do2 = DependentObject2()
38+
39+
def set_data(self, data1, data2):
40+
self.do1.set_data(data1)
41+
self.do2.set_data(data2)
42+
43+
def get_data(self):
44+
return self.do1.get_data(), self.do2.get_data()
45+
46+
47+
class CompositeEntity:
48+
def __init__(self):
49+
self.cgo = CoarseGrainedObject()
50+
51+
def set_data(self, data1, data2):
52+
self.cgo.set_data(data1, data2)
53+
54+
def get_data(self):
55+
return self.cgo.get_data()
56+
57+
58+
class Client:
59+
def __init__(self):
60+
self.compositeEntity = CompositeEntity()
61+
62+
def print_data(self):
63+
for data in self.compositeEntity.get_data():
64+
print(f'Data: {data}')
65+
66+
def set_data(self, data1, data2):
67+
self.compositeEntity.set_data(data1, data2)
68+
69+
70+
if __name__ == '__main__':
71+
client = Client()
72+
client.set_data("Test", "Data")
73+
client.print_data()
74+
75+
client.set_data("Second Test", "Data2")
76+
client.print_data()

‎行为型模式-登记模式.py

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# -*- coding: utf-8 -*-
2+
# @Author : ydf
3+
# @Time : 2019/10/9 0009 13:53
4+
"""
5+
登记模式。用这个可以兼顾单例模式的创建和管理。
6+
"""
7+
class RegistryHolder(type):
8+
9+
REGISTRY = {}
10+
11+
def __new__(cls, name, bases, attrs):
12+
new_cls = type.__new__(cls, name, bases, attrs)
13+
"""
14+
Here the name of the class is used as key but it could be any class
15+
parameter.
16+
"""
17+
cls.REGISTRY[new_cls.__name__] = new_cls
18+
return new_cls
19+
20+
@classmethod
21+
def get_registry(cls):
22+
return dict(cls.REGISTRY)
23+
24+
25+
class BaseRegisteredClass(metaclass=RegistryHolder):
26+
"""
27+
Any class that will inherits from BaseRegisteredClass will be included
28+
inside the dict RegistryHolder.REGISTRY, the key being the name of the
29+
class and the associated value, the class itself.
30+
"""
31+
32+
33+
if __name__ == "__main__":
34+
print(sorted(RegistryHolder.REGISTRY))
35+
36+
class ClassRegistree(BaseRegisteredClass):
37+
def __init__(self, *args, **kwargs):
38+
pass
39+
40+
41+
print(sorted(RegistryHolder.REGISTRY))

‎行为型模式-过滤器模式.py

+92
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# -*- coding: utf-8 -*-
2+
# @Author : ydf
3+
# @Time : 2019/10/9 0009 14:17
4+
"""
5+
过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。
6+
"""
7+
from abc import ABCMeta, abstractmethod
8+
from monkey_print2 import print
9+
10+
11+
class Person:
12+
def __init__(self, name, sex, marital_status):
13+
self.name = name
14+
self.sex = sex
15+
self.marital_status = marital_status
16+
17+
def __str__(self):
18+
return f"""Person: [Name: {self.name}, Gender: {self.sex} Marital Status: {self.marital_status}]"""
19+
20+
21+
class Criteria(metaclass=ABCMeta):
22+
@abstractmethod
23+
def meet_criteria(self, persons) -> list:
24+
pass
25+
26+
27+
class CriteriaMale(Criteria):
28+
def meet_criteria(self, persons) -> list:
29+
return [p for p in persons if p.sex.lower() == 'MALE'.lower()]
30+
31+
32+
class CriteriaFemale(Criteria):
33+
def meet_criteria(self, persons) -> list:
34+
return [p for p in persons if p.sex.lower() == 'FEMALE'.lower()]
35+
36+
37+
class CriteriaSingle(Criteria):
38+
def meet_criteria(self, persons) -> list:
39+
return [p for p in persons if p.sex.lower() == 'SINGLE'.lower()]
40+
41+
42+
class AndCriteria(Criteria):
43+
def __init__(self, criteria: Criteria, criteria_other: Criteria):
44+
self.criteria = criteria
45+
self.criteria_other = criteria_other
46+
47+
def meet_criteria(self, persons) -> list:
48+
return self.criteria_other.meet_criteria(self.criteria.meet_criteria(persons))
49+
50+
51+
class OrCriteria(Criteria):
52+
def __init__(self, criteria: Criteria, criteria_other: Criteria):
53+
self.criteria = criteria
54+
self.criteria_other = criteria_other
55+
56+
def meet_criteria(self, persons) -> list:
57+
persons1 = self.criteria.meet_criteria(persons)
58+
persons2 = self.criteria_other.meet_criteria(persons)
59+
return list(set(persons1 + persons2))
60+
61+
62+
if __name__ == '__main__':
63+
def print_person_list(p_list):
64+
for p in p_list:
65+
print(p)
66+
67+
68+
person_list = list()
69+
person_list.append(Person("Robert", "Male", "Single"))
70+
person_list.append(Person("John", "Male", "Married"))
71+
person_list.append(Person("Laura", "Female", "Married"))
72+
person_list.append(Person("Diana", "Female", "Single"))
73+
person_list.append(Person("Mike", "Male", "Single"))
74+
person_list.append(Person("Bobby", "Male", "Single"))
75+
76+
male = CriteriaMale()
77+
female = CriteriaFemale()
78+
single = CriteriaSingle()
79+
singleMale = AndCriteria(single, male)
80+
singleOrFemale = OrCriteria(single, female)
81+
82+
print("\nMales: ")
83+
print_person_list(male.meet_criteria(person_list))
84+
85+
print("\nFemales: ")
86+
print_person_list(female.meet_criteria(person_list))
87+
88+
print("\nSingle Males: ")
89+
print_person_list(singleMale.meet_criteria(person_list))
90+
91+
print("\nSingle Or Females: ")
92+
print_person_list(singleOrFemale.meet_criteria(person_list))

0 commit comments

Comments
 (0)
Please sign in to comment.