乌, fupansrf
啦啦啦
关注数: 21 粉丝数: 9 发帖数: 705 关注贴吧数: 37
设计模式-可复用面向对象软件的基础 4.1~4.4 适配器模式(Adapter Pattern) 应用场景: 当需要将一个类的接口转换成客户端所期望的另一个接口时。 当需要使用一些已经存在的类,而这些类的接口与当前系统不兼容时。 在使用第三方库或框架时,其提供的接口与项目中的接口不一致,可以通过适配器模式进行转换。 优点: 提高了系统的灵活性和可扩展性。 降低了系统的耦合度,使得系统更加容易维护和升级。 使得原本不能一起工作的类能够协同工作。 缺点: 增加了系统的复杂性,因为需要引入额外的适配器类。 如果过度使用适配器模式,可能会导致系统变得难以理解和维护。 桥梁模式(Bridge Pattern) 应用场景: 当一个类存在两个或多个独立变化的维度时。 当不希望因为某个维度的变化而影响到另一个维度的设计时。 在实现抽象和具体类的分离时,可以使用桥梁模式。 优点: 提高了系统的可扩展性,因为可以在不修改抽象类的情况下,增加新的具体实现。 降低了系统的耦合度,因为抽象和具体实现之间是通过接口进行通信的。 使得系统更加灵活,可以轻松地更换具体实现。 缺点: 增加了系统的复杂性,因为需要引入额外的抽象层和接口。 如果设计不当,可能会导致系统变得难以理解和维护。 组合模式(Composite Pattern) 应用场景: 当需要表示对象的部分-整体层次结构时。 当希望客户端能够忽略组合对象与单个对象的差异,以统一的方式处理它们时。 在需要构建复杂的树形结构时,可以使用组合模式。 优点: 使得客户端能够以统一的方式处理单个对象和组合对象。 提高了系统的可扩展性,因为可以在不修改现有代码的情况下,增加新的组件。 简化了客户端代码,因为客户端不需要区分处理的是单个对象还是组合对象。 缺点: 在设计组合对象时,需要仔细考虑接口的设计,以确保其能够正确地表示部分-整体的关系。 如果组合结构过于复杂,可能会导致系统变得难以理解和维护。 装饰者模式(Decorator Pattern) 应用场景: 当需要动态地给一个对象添加一些额外的职责时。 当这些额外的职责不能通过继承的方式来实现时(因为继承会导致类的爆炸)。 在需要扩展一个类的功能时,可以使用装饰者模式。 优点: 提高了系统的灵活性和可扩展性,因为可以在不修改原有类的情况下,增加新的功能。 避免了类的爆炸,因为不需要为每一个功能都创建一个子类。 使得系统更加容易理解和维护,因为装饰者和被装饰者之间是通过组合关系来连接的。 缺点: 增加了系统的复杂性,因为需要引入额外的装饰者类。 如果过度使用装饰者模式,可能会导致系统变得难以理解和维护。
设计模式-可复用面向对象软件的基础4.1-4.4 适配器模式(Adapter Pattern) 应用场景: 当需要将一个类的接口转换成客户端所期望的另一个接口时。 当需要使用一些已经存在的类,而这些类的接口与当前系统不兼容时。 在使用第三方库或框架时,其提供的接口与项目中的接口不一致,可以通过适配器模式进行转换。 优点: 提高了系统的灵活性和可扩展性。 降低了系统的耦合度,使得系统更加容易维护和升级。 使得原本不能一起工作的类能够协同工作。 缺点: 增加了系统的复杂性,因为需要引入额外的适配器类。 如果过度使用适配器模式,可能会导致系统变得难以理解和维护。 桥梁模式(Bridge Pattern) 应用场景: 当一个类存在两个或多个独立变化的维度时。 当不希望因为某个维度的变化而影响到另一个维度的设计时。 在实现抽象和具体类的分离时,可以使用桥梁模式。 优点: 提高了系统的可扩展性,因为可以在不修改抽象类的情况下,增加新的具体实现。 降低了系统的耦合度,因为抽象和具体实现之间是通过接口进行通信的。 使得系统更加灵活,可以轻松地更换具体实现。 缺点: 增加了系统的复杂性,因为需要引入额外的抽象层和接口。 如果设计不当,可能会导致系统变得难以理解和维护。 组合模式(Composite Pattern) 应用场景: 当需要表示对象的部分-整体层次结构时。 当希望客户端能够忽略组合对象与单个对象的差异,以统一的方式处理它们时。 在需要构建复杂的树形结构时,可以使用组合模式。 优点: 使得客户端能够以统一的方式处理单个对象和组合对象。 提高了系统的可扩展性,因为可以在不修改现有代码的情况下,增加新的组件。 简化了客户端代码,因为客户端不需要区分处理的是单个对象还是组合对象。 缺点: 在设计组合对象时,需要仔细考虑接口的设计,以确保其能够正确地表示部分-整体的关系。 如果组合结构过于复杂,可能会导致系统变得难以理解和维护。 装饰者模式(Decorator Pattern) 应用场景: 当需要动态地给一个对象添加一些额外的职责时。 当这些额外的职责不能通过继承的方式来实现时(因为继承会导致类的爆炸)。 在需要扩展一个类的功能时,可以使用装饰者模式。 优点: 提高了系统的灵活性和可扩展性,因为可以在不修改原有类的情况下,增加新的功能。 避免了类的爆炸,因为不需要为每一个功能都创建一个子类。 使得系统更加容易理解和维护,因为装饰者和被装饰者之间是通过组合关系来连接的。 缺点: 增加了系统的复杂性,因为需要引入额外的装饰者类。 如果过度使用装饰者模式,可能会导致系统变得难以理解和维护。
重构-改善既有代码的设计 第8章 搬移特性 1.搬移函数 多处频繁调用的函数可以搬移到更通用的地方,类似我们的基础库 2.搬移字段 总是一同出现、一同作为函数参数传递的数据,最好是规整到同一条记录中,以体现它们之间的联系 3. 搬移语句到函数 通过将重复的代码段整合到一个函数中,可以提高代码的复用性和可读性,同时也方便了代码的维护和修改。如果需要为不同调用者实现不同的行为,可以通过将相关代码段搬移出来。 4.搬移语句到调用 随着系统功能的持续演进,原有的抽象边界可能不再适用,调整时的处理方法包括将不同的行为从函数中转移到调用处,或者在调用点和调用者间形成新的边界,需要考虑提炼出新的函数,以便形成更合适的抽象边界。 5. 以函数调用取代内联代码 函数能有效地整合相关行为,消除重复代码,同时也便于修改。相同的内联代码可以替换为函数调用,但是,如果内联代码和函数在实质上并没有关联,那么在修改函数时,就需要避免影响到内联代码的行为,因此需要考虑是否用函数调用来替代。此外,利用库函数可以提高编程效率。 6. 移动语句 将关联代码放一起,有利于代码更容易理解和修改,且是提炼函数等重构工作的前提。在首次使用变量的地方声明它,而不是在函数顶部一次性声明所有变量。 7. 拆分循环 建议一个循环只做一件事情,修改时可以更好地理解和控制。虽然这样可能需要执行两次循环,但可以先重构后优化,因为清晰的代码结构更有利于进一步的优化。循环本身很少成为性能瓶颈,反而拆分循环可以开启更强大的优化手段。 8. 以管道取代循环 使用集合管道编写逻辑的优势在于可读性的提升,通过读代码,可以清晰地理解对象在管道中的变换过程。 9.移除死代码 不再使用的代码应立刻删除,保持代码的整洁和易读性。如果担心以后需要,删除后在代码中留下注释,说明这段代码的存在以及它被删除的提交版本号,通过版本控制系统恢复。
首页 1 2 下一页