《设计模式》模板设计方法——面条非常香

近期非常喜欢吃面,今天一下课就又去吃面了。上次吃的排骨面,上上次吃的鸡排面,两个都好吃。事实上吧,想想

这两唯一的差别就是加鸡排的就是鸡排面,加排骨就是排骨面。别的东西都一样。

吃饱回来,继续学习大话设计模式之模板方法模式

所谓的模板方法模式,就是定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类能够不改变一个算法结构就可又一次定义算法的某些特定步骤。

  看看模板方法的结构图:

                       

理论总是须要实践去证明的,接下来就让我们以文章开头的大碗面为例,举例细说模板方法模式。

食堂的大碗面分有鸡排,排骨面等等,面的叫法不一样,可是做法一样,加的原料也差点儿相同,葱,香菜,汤。唯

一的不同就是加排骨还是鸡排。

来看看代码的实现:

abstract class Noodles //抽象面类
    {
public abstract void meat();
        public abstract void soup();//抽象行为放到子类中去实现
        public abstract void onion();
        public abstract void coriander();
    }
    class ChickenNoodles : Noodles//鸡排面
    {
        public override void meat()
        {
           Console .WriteLine ( "加鸡排");
        }
        public override void soup()
        {
           Console .WriteLine("有汤");
        }
        public override void onion()
        {
          Console .WriteLine( "有葱");
        }
        public override void coriander()
        {
           Console .WriteLine("有香菜");
        }
    }
    class SpareribsNoodles : Noodles//排骨面
    {
        public override void meat()
        {
            Console .WriteLine("加排骨");
        }
        public override void soup()
        {
            Console.WriteLine("有汤");
        }
        public override void onion()
        {
            Console.WriteLine("有葱");
        }
        public override void coriander()
        {
            Console.WriteLine("有香菜");
        }
    }

上述代码,能够看出,两种面代码好多是反复的,所以应该改动代码,例如以下:

abstract class Noodles //抽象面类
    {
public abstract void meat();//抽象方法放到子类中去实现
        public void soup()
        {
           Console.WriteLine("有汤");
        }
        public void onion()
        {
           Console.WriteLine("有葱");
        }
        public voidcoriander()
        {
           Console.WriteLine("有香菜");
        }
    }
    class ChickenNoodles :Noodles//鸡排面
    {
        public override voidmeat()
        {
           Console .WriteLine ("加鸡排");
        }

    }
    class SpareribsNoodles :Noodles//排骨面
    {
        public override voidmeat()
        {
            Console.WriteLine("加排骨");
        }

    }

对照发现,改动之后的子类代码很easy。同样操作的方法都在父类中去实现,子类中之存放不同样的方法。这里应该注意全部反复的代码都应该上升到父类中,而不是让每一个子类都反复。

 

先看看总体结构图:

                   

最后总结一下模板方法的特点:通过把不变的行为搬移到父类,去除子类中反复的代码来体现它的优势。 

       样例中的鸡排面和排骨面仅仅由于加的肉不同而不同,所以子类中仅仅有这种方法,别的方法都同样,所以都写到父类中。

       将学习和生活结合起来,学习将更高效和搞笑O(_)O~

时间: 2024-10-27 10:55:07

《设计模式》模板设计方法——面条非常香的相关文章

模板设计方法——面条很香

最近很喜欢吃面,今天一下课就又去吃面了.上次吃的排骨面,上上次吃的鸡排面,两个都好吃.其实吧,想想 这两唯一的区别就是加鸡排的就是鸡排面,加排骨就是排骨面.别的东西都一样. 吃饱回来,继续学习大话设计模式之模板方法模式. 所谓的模板方法模式,就是定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改 变一个算法结构就可重新定义算法的某些特定步骤.   看看模板方法的结构图:                         理论总是需要实践去证明的,接下来就让我们以文章开头的大碗面

Axure中移动端原型设计方法(附IPhoneX和IPhone8最新模板)

Axure中移动端原型设计方法(附IPhoneX和IPhone8最新模板) 2018年4月16日luodonggan Axure中基于设备模板的移动端原型设计方法(附IPhoneX和IPhone8最新模板) 文章作者分享了一种基于设备模板的移动端原型设计方法,相信能够对你的原型设计工作带来帮助,值得马克. 在使用Axure设计移动端原型的应用方面,我总结出了两种常用的方法.第一种是更适合在移动端进行演示的设计方法,大家可以参考我之前已经分享过的一篇教程:使用Axure打造最佳的移动端交互原型教程

设计模式——设计模式与设计原则

设计模式--设计模式与设计原则 一.设计模式  1.设计模式简介 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石. 模式的经典定义:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的解决方案,无需再

Java设计模式之工厂方法模式

工厂方法模式介绍 有时候,由于产品的多样化,但是产品的功能却有某种共同的联系.我们希望定义一个用于创建产品对象的公共接口,让子类决定去如何实现这个功能.然后,我们定义一个生产产品的"工厂",所有的产品将从这个工厂里面生产出来,这样我们就使得产品的构造的细节与工厂分离了,这样产品的实现细节就被封装起来了,并且产品的可扩展性也很强.那么,这种设计模式我们称为工厂方法模式.具体的实例有很多,比如说去年的某一阵子脸萌软件爆红,其中就运用到了工厂方法模式来给用户生产各种脸型. 工厂方法模式分类

Android基类设计方法详解

1 为什么要设计基类 为什么要给程序设计基类呢?主要是出于2个原因,一是方便代码编写,减少重复代码和冗余逻辑,优化代码:二是优化程序架构,降低耦合度,方便拓展.修改. ok,编写代码是程序员的第一步,那么第二步就是要编写高质量的代码,代码能实现功能是一方面,写的优美则是另一方面,这也是我们所有攻城狮们应该追求的境界. 2 设计基类的基本思路 那么,哪些东西我们需要抽象到基类中呢? 2.1 重复的代码:如果一个逻辑是大多数子类都需要使用的 2.2 臭而长的代码:典型的findviewbyid.To

设计模式与设计原则简介(一)

什么是设计模式? 我们知道对于很多数学问题,经常会有多种不同的解法 而且这其中可能会有一种比较通用简便高效的方法 我们在遇到类似的问题或者同一性质的问题时,也往往采用这一种通用的解法 将话题转移到程序设计中来 对于软件开发人员, 在软件开发过程中, 面临的一般问题的解决方案就是设计模式(准确的说是OOP中) 当然,如同数学的解题思路一样,设计模式并不是公式一样的存在 设计模式(Design pattern)代表了最佳的实践 是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的宝贵经验 是

框架源码系列一:设计模式(设计思想、设计原则、各种设计模式介绍、设计模式总结)

要分析常用框架spring.mybatis.springboot.springcloud等的源码,首先要了解各种设计模式,因为框架里面应用了各种设计模式 一.设计思想 学习设计模式最重要的是掌握设计思想和设计原则,理解了设计思想和设计原则并运用到平时的编码中是最重要的!!! 1. 我们先来看下面的问题: 天天加班编程,编程到底都做的是什么? 撸代码,加班撸代码,写接口.写类.写方法 用设计模式或做设计的作用是什么? 指导.规定该如何撸代码,如何来写接口.写类.写方法 为什么要做设计.用设计模式?

设计模式之设计原则学习

设计模式的设计原则包含了:单一职责原则.里氏替换原则.依赖倒置原则.接口隔离原则.迪米特法则和开闭原则等6大原则. 单一职责原则(Single Responsibility Principle,简称SRP),英文介绍为:There should never be more than one reason for a class to change,即一个类,应当只有一个引起它变化的原因.单一职责原则,要求对象不能承担太多的职责,充分保证对象的高内聚.单一职责的优点有:1.降低了类的复杂性:2.提

设计模式之设计原则(中)

接口隔离原则(Interface Segregation Principle ),简称ISP:该原则核心思想就是客户端不应该被强迫实现一些不会使用的接口,应该把胖接口中的方法分组,然后用多个接口来代替,每一个接口只服务与一个子模块.这个跟上次分享的单一职责原则类似. 设计接口隔离原则的目的:当我们设计应用程序时,如果一个模块包含多个子模块,那我们应该正对该模块抽象.设想该模块由一个类实现,我们可以把系统抽象成一个接口,但是我们想要添加新的模块扩展程序时,如果要添加的模块只包含原来系统的一些子模块