zoukankan      html  css  js  c++  java
  • 设计模式之模板方法

    模板方法概念:
    模板方法定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构
    即可重定义该算法的某些特定步骤。
    模板方法是一种代码复用的基本技术,在类库中尤为重要,因为他们提取了类库中的公共行为。模板方式导致一种反向的
    控制结构,这种结构就是传说中的好莱坞法则,即别找我们,我们找你。这指的是父类调用一个类的操作,而不是相反。
    具体体验的是面向对象编程编程语言里的抽象类(以及其中的抽象方法),以及继承该抽象(和抽象方法)的。
    模板方法的模板作用:
    1.一次性实现一个算法的不变部分,并将可变的行为留给子类来实现。
    2.各子类中公共的行为应被提取出来并集中到一个公共父类中的避免代码重复,不同之处分离为新的操作,
    最后,用一个钓鱼这些新操作的模板方法来替换这些不同的代码。
    3.控制子类扩展,模板方法只在特定点调用hook操作,这样就允许在这些点进行扩展。
    注意事项:
    1.和策略模式不同,模板方法使用继承来改变算法的一部分,而策略模式使用委托来改变整个算法。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
        <script>
            function shangdi(){
    
            }   
            shangdi.prototype.zaoren_yanjing = function(first_argument){
                console.log('眼睛');
            } 
            shangdi.prototype.zaoren_bizi = function(first_argument){
                console.log('鼻子');
            } 
            shangdi.prototype.zaoren_zuiba = function(first_argument){
                console.log('嘴巴');
            } 
            shangdi.prototype.aihao = function(first_argument){
                throw new Error('我只是个钩子,需要你自己去探索');
            }
            function xiaoming(){
                console.log('小明是上帝的子类');
            }
            xiaoming.prototype=new shangdi();
            xiaoming.prototype.aihao = function(){
                console.log('小明爱讲笑话');
            }
        </script>
        <script>
            function liucheng(){
    
            }
            liucheng.prototype.start = function(){
                confirm('您是否进入游戏?');
            }
            liucheng.prototype.loading = function(){
                console.log('游戏加载中....');
            }
            liucheng.prototype.out = function(){
                confirm('您是否要离开游戏?');
            }
            function xiaojigege(){
    
            }
            xiaojigege.prototype=new liucheng();
            xiaojigege.start()
        </script>
    </body>
    </html>
    

    本文学习自常见设计模式视频

  • 相关阅读:
    如何利用InstallShield for Delphi7打包Oracle9i客户端制作C/S数据库应用程序?
    delphi 保存 和 打开 TREE VIEW的节点已经展开的状态
    在Delphi中的TreeView中保存多个数据
    FastReport经验
    农码一生博文索引
    再讲IQueryable<T>,揭开表达式树的神秘面纱
    你知道C#中的Lambda表达式的演化过程吗?
    先说IEnumerable,我们每天用的foreach你真的懂它吗?
    Linq表达式、Lambda表达式你更喜欢哪个?
    你必须知道的EF知识和经验
  • 原文地址:https://www.cnblogs.com/smart-girl/p/11542095.html
Copyright © 2011-2022 走看看