Python implementa el patrón de diseño del decorador

El decorador de Python es simple y la implementación básica no es complicada. El patrón de los decoradores es similar a la herencia. Cuando necesitas agregar acciones y comportamientos adicionales a un objeto, puedes usar decoradores sin cambiar la clase. No quería escribir este artículo como un artículo de hidrología, porque esta columna es una realización básica en varios idiomas del patrón de diseño y no involucra demasiado contenido. Para garantizar la integridad del contenido, solo se puede insertar directamente.

Primero, creamos una nueva clase base para una persona y asignamos varios atributos (nombre, género, cabello, ropa, etc.), y hay dos clases base, hombre y mujer:

class People():
    name = ""
    sex=""
    clothes = "没穿"
    hair="光头"
    sound_color=""

class Man(People):
    def __init__(self,name):
        self.name=name
        self.sex="男"
 
class Woman(People):
    def __init__(self,name):
        self.name=name
        self.sex="女" 

Debido a la clase y la nueva creación, no se realizan cambios y el decorador se usa para agregar el estado de comportamiento.
Cree una nueva clase base de decorador, configure los métodos de decorador, gethair y getclothes, y escriba dos clases hairDecorator y dressDecorator heredadas de exteriorDecorator, haga que el objeto crezca cabello en el decorador hairDecorator, el valor de atributo del cabello en el objeto original es crítico , Haga que el objeto use ropa en vestidoDecorador, el atributo original es sin ropa. La clase de decorador es la siguiente:

class exteriorDecorator():#外形装饰基
    def gethair(self):
        pass
    def getclothes(self):
        pass
        
class hairDecorator(exteriorDecorator):#头发装饰
    def __init__(self,people):
        self.people=people
        self.sex="男"
    def gethair(self):
        return str(self.people.name)+" 长出头发"

class dressedDecorator(exteriorDecorator):#外衣装饰
    def __init__(self,people):
        self.people=people
        self.sex="男"
    def getclothes(self):
        return str(self.people.name)+" 穿上外衣"

El decorador anterior pasó el objeto de clase durante la inicialización. A continuación, cree un nuevo objeto Xiaoming y un objeto decorador:

xiaoming=Man("小明")
xiaomingHariD=hairDecorator(xiaoming)

Usa el método hairDecorator para decorar el cabello de Xiao Ming, y usa DressDecorator para decorar la parte superior de Xiao Ming:

xiaomingHariD=hairDecorator(xiaoming)
xiaomingdressedD=dressedDecorator(xiaoming)

Finalmente, salida:

print(xiaomingHariD.gethair())
print(xiaomingdressedD.getclothes())

Los resultados son los siguientes: el
Inserte la descripción de la imagen aquí
código completo es el siguiente:

class People():
    name = ""
    sex=""
    clothes = "没穿"
    hair="光头"
    sound_color=""

class Man(People):
    def __init__(self,name):
        self.name=name
        self.sex="男"
 
class Woman(People):
    def __init__(self,name):
        self.name=name
        self.sex="女" 


class exteriorDecorator():#外形装饰基
    def gethair(self):
        pass
    def getclothes(self):
        pass
        
class hairDecorator(exteriorDecorator):#头发装饰
    def __init__(self,people):
        self.people=people
        self.sex="男"
    def gethair(self):
        return str(self.people.name)+" 长出头发"

class dressedDecorator(exteriorDecorator):#外衣装饰
    def __init__(self,people):
        self.people=people
        self.sex="男"
    def getclothes(self):
        return str(self.people.name)+" 穿上外衣"

xiaoming=Man("小明")
print(xiaoming.name)
xiaomingHariD=hairDecorator(xiaoming)
xiaomingdressedD=dressedDecorator(xiaoming)
print(xiaomingHariD.gethair())
print(xiaomingdressedD.getclothes())

Supongo que te gusta

Origin blog.csdn.net/A757291228/article/details/107100321
Recomendado
Clasificación