如何提高代码复用性,定义骨架?

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 如何提高代码复用性,定义骨架?

点击上方”python宝典”,关注获取python全套视频,

技术文章第一时间送达!

模板方法模式

1、内容

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

2、角色

  • 抽象类:定义抽象的原子操作(钩子操作);实现一个模板方法的骨架
  • 具体类:实现原子操作
  • 3、适用场景

  • 一次性实现一个算法的不变的部分
  • 各个子类中的公共行为应该被提取出来并集中到一个公共父类中以避免代码重复
  • 控制子类扩展
  • 4、优点

  • 提高代码复用性  将相同部分的代码放在抽象的父类中

  • 提高了拓展性  将不同的代码放入不同的子类中,通过对子类的扩展增加新的行为

  • 实现了反向控制  通过一个父类调用其子类的操作,通过对子类的扩展增加新的行为,实现了反向控制 & 符合“开闭原则”

  • 5、缺点

    引入了抽象类,每一个不同的实现都需要一个子类来实现,导致类的个数增加,从而增加了系统实现的复杂度。

    6、示例代码

    
    from abc import ABCMeta, abstractmethod
    
    class IOHandler(metaclass=ABCMeta):
        @abstractmethod
        def open(self, name):
            pass
        @abstractmethod
        def deal(self, change):
            pass
        @abstractmethod
        def close(self):
            pass
    
        def process(self, name, change):
            '''模板,就相当于是一个空盒子,可以往里面添加自己需要的功能。让这个函数去执行'''
            self.open(name)
            self.deal(change)
            self.close()
    
    
    class FileHandler(IOHandler):
        def open(self, name):
            print('打开文件')
    
        def deal(self, change):
            print('操作文件')
    
        def close(self):
            print('关闭文件')
    
    obj = FileHandler()
    obj.process('abc.txt','')
    
    如何提高代码复用性,定义骨架?

    识别图中二维码,欢迎关注python宝典

    本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

    本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

    原文链接:blog.ouyangsihai.cn >> 如何提高代码复用性,定义骨架?


     上一篇
    设计模式(原型模式) 设计模式(原型模式)
    点击上方”python宝典”,关注获取python全套视频, 技术文章第一时间送达! 原型模式以前听过这样一句话:“程序员的最高境界就是Ctrl+C、Ctrl+V”,我们先不论这句话的对错,就论这个过程,这个过程我们都知道无非就是复制一个对
    2021-04-05
    下一篇 
    想要什么适配什么? 想要什么适配什么?
    点击上方”python宝典”,关注获取python全套视频, 技术文章第一时间送达! 适配器模式1、内容 将一个类的接口转换成客户希望的另一个接口。适配器模式使得原来由于接口不兼容而不能一起工作的那些类可以一起工作 2、角色 目标接口(T
    2021-04-05