🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,阿里云专家博主,腾讯云优秀博主,掘金优秀博主,51CTO博客专家等。 🏆《近期荣誉》:2022年CSDN博客之星TOP2,2022年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。
毫无疑问,设计模式对个人、团队和整个系统都带来了显著的益处。它们将代码开发提升到工程化水平,为软件工程构建提供了坚实的基础,就如同大厦的一块块精巧的砖石一样。在项目中明智地应用设计模式可以完美地解决各种复杂问题。每种设计模式都有相应的原理和最佳实践,它们描述了我们日常开发中不断遇到的问题,以及这些问题的核心解决方法。正是因为这种实用性和通用性,设计模式才能在软件开发中广泛地得以应用。设计模式是构建稳健、可扩展和可维护软件的关键工具,为开发者们提供了解决问题的智慧和指导。
代理模式是一种结构型设计模式,它为其他对象提供了一种代理,以控制对目标对象的访问。这种模式的出现是因为在某些情况下,直接引用一个对象并不合适或不可行,而代理对象可以充当客户端和目标对象之间的中介,提供了更多的控制和灵活性。
代理模式通常在以下情况下使用:
代理模式允许我们在不改变原有代码逻辑的情况下,通过引入代理对象来管理和控制对目标对象的访问。这提供了更多的灵活性和可维护性,使我们能够更好地管理对象之间的交互和访问权限。
在代理模式(Proxy Pattern)中,抽象主题(Subject)是一个关键的概念,它扮演了代理对象和真实对象之间的桥梁角色,具有以下作用:
抽象主题在代理模式中充当了接口定义和客户端与代理对象之间的中介角色,它提供了一种灵活的方式来控制和管理对真实对象的访问,并允许在不改变客户端代码的情况下引入代理对象。这有助于提高代码的可维护性、扩展性和灵活性。
代理模式(Proxy Pattern)中的代理主题(Proxy)是一个重要的概念,它充当了客户端和真实主题(Real Subject)之间的中介或代理角色,具有以下作用:
代理主题在代理模式中充当了客户端与真实主题之间的中介,可以控制和扩展对真实对象的访问方式,提供了一种更加灵活和可管理的方式来管理对象的访问和行为。这使得代理模式在许多不同的应用场景
在代理模式(Proxy Pattern)中,真实主题(Real Subject)是一个核心概念,它代表了被代理的真实对象,具有以下作用:
真实主题是代理模式的核心组成部分,它代表了真正的业务逻辑或对象,通过代理来提供访问和控制的方式。真实主题的存在使得代理模式能够解决许多不同的问题,包括延迟加载、权限控制、性能优化等。客户端通过代理对象间接访问真实主题,实现了对真实主题的控制和封装。
命名空间ProxyPattern中包含Employee员工类充当抽象主题,Leader领导类充当代理主题,Staff普通员工类充当真实主题。本案例尝试通过员工采购一批桌子来介绍领导是如何通过使用普通员工作为自己的代理为公司采购商品的。
public abstract class Employee {
public abstract void Purchase(string goods);
protected virtual void OnPurchasing() {
Console.WriteLine("Employee.OnPurchasing()");
}
protected virtual void OnPurchased() {
Console.WriteLine("Employee.OnPurchased()");
}
}
员工类Employee。
public class Staff : Employee {
public override void Purchase(string goods) {
OnPurchasing();
Console.WriteLine($"Purchase some {goods}s!");
OnPurchased();
}
protected override void OnPurchasing() {
Console.WriteLine("Staff.OnPurchasing()");
}
protected override void OnPurchased() {
Console.WriteLine("Staff.OnPurchasing()");
}
}
普通员工类Staff。
public class Leader : Employee {
private Staff _staff = null;
public Leader() {
_staff = new Staff();
}
public override void Purchase(string goods) {
_staff.Purchase(goods);
}
}
领导类Leader,内部维持一个员工的引用,并在Purchase采购方法调用普通员工的采购方法。完成了一次代理购物。
public class Program {
private static Employee _employee = null;
public static void Main(string[] args) {
_employee = new Leader();
_employee.Purchase("desk");
Console.ReadKey();
}
}
以上是调用方的代码,以下是这个案例的输出结果:
Staff.OnPurchasing()
Purchase some desks!
Staff.OnPurchasing()
代理模式(Proxy Pattern)具有许多优点,这些优点使得它成为软件设计中常用的模式之一:
代理模式是一种非常有用的设计模式,它可以应用于各种场景,帮助解决访问控制、性能优化、资源管理和分布式系统等问题,同时提高了代码的可维护性和可扩展性。
尽管代理模式(Proxy Pattern)具有许多优点,但也存在一些缺点和限制,需要在使用时考虑和权衡:
代理模式是一种强大的设计模式,但在使用时需要权衡其优点和缺点,根据具体场景选择是否使用以及如何使用。避免过度使用代理模式,特别是在简单场景下,以避免引入不必要的复杂性和性能问题。
代理模式(Proxy Pattern)适用于许多不同的场景,其中一些常见的使用场景包括:
代理模式在需要控制、管理、延迟加载、保护或优化对对象的访问时非常有用。它提供了一种灵活的方式来封装和管理对象的访问,同时保持客户端与真实对象之间的松耦合关系。在设计软件时,根据具体需求和场景考虑是否使用代理模式。