设计模式:Python实现结构型模式

本文介绍了常见的结构型设计模式,如装饰器模式用于拓展对象功能,代理模式实现对象操作代理,适配器模式统一接口。通过实例演示了装饰器、代理模式的应用以及适配器模式如何简化复杂对象访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、常见结构型设计模式

装饰器模式(Decorator): 无需子类化拓展对象功能

代理模式(Proxy): 把一个对象的操作代理到另一个对象

适配器模式(Adapter): 通过一个间接层适配统一接口

外观模式(Facade): 简化复杂对象的访问问题

享元模式(Flyweight): 通过对象复用(池)改善资源利用,比如连接池

MVC Model-View-Controller: 解耦展示逻辑和业务逻辑

二、代理模式

把一个对象的操作代理另一个对象

  • 通过json 模块的 dumps方法 对对象进行json编码,通过json_encode(o) 方式进行代理,间接调用了json.dumps(o)
import json


def json_encode(o):
    """将对象使用json编码"""
    return json.dumps(o)

def json_decode(s):
    """将字符串使用json解码"""
    return json.loads(s)


d = {'key1': 'value1', 'key2': 'value2'}
encode_res = json_encode(d)
print(encode_res,type(encode_res))
decode_res = json_decode(encode_res)
print(decode_res,type(decode_res))

输出结果:

三、适配器模式

通过一个间接层适配统一接口

class Dog(object):
    def __init__(self):
        self.name = "Dog"

    def bark(self):
        return 'woof'


class Cat(object):
    def __init__(self):
        self.name = 'Cat'

    def meow(self):
        return 'meow'


class Adapter:
    def __init__(self, obj, **adapter_methods):
        self.obj = obj
        self.__dict__.update(adapter_methods)

    def __getattr__(self, attr):
        return getattr(self.obj, attr)


objects = []
dog = Dog()
objects.append(Adapter(dog, make_noise=dog.bark))

cat = Cat()
objects.append(Adapter(cat, make_noise=cat.meow))
for obj in objects:
    print(f"{obj.name} goes {obj.make_noise()}")

输出结果:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值