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

        今天我要向大家介绍的设计模式叫做模板模式。模板模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤(摘自菜鸟教程)。模板模式在开发中使用的非常的频繁并且在spring中大量的使用了模板模式。

        1.定义一个抽象模板类:

    //制作饮品
    public abstract class MakeDrink {
        private void boilWater(){
            System.out.println("烧水");
        }
        protected abstract void machining(); //加工
        protected void encapsulation(){
            System.out.println("把做好的饮品倒进杯里");
        }
        
        //防止子类重写
        public final void getDrink(){
            boilWater();
            machining();
            encapsulation();
        }
        
    }

    2.定义具体的饮品类:

    public class TeaDrink extends MakeDrink{
    
        @Override
        protected void machining() {
            System.out.println("加入茶叶");
        }
    
    }
    
    public class OffeeDrink  extends MakeDrink{
    
        @Override
        protected void machining() {
            System.out.println("加入咖啡豆");
        }
    
    }

    3.客户端调用:

    public static void main(String[] args) {
            MakeDrink offeedrink = new OffeeDrink();
            offeedrink.getDrink();
            System.out.println("===========");
            MakeDrink teadrink = new TeaDrink();
            teadrink.getDrink();
        }
    
    
    
    执行结果:
    烧水
    加入咖啡豆
    把做好的饮品倒进杯里
    ===========
    烧水
    加入茶叶
    把做好的饮品倒进杯里

    使用模板模式可以实现代码的复用,但是每个不同的实现都需要一个子类会导致类的数量增加并且继承也使代码耦合在了一起。

  • 相关阅读:
    hdu 2586 How far away ?(LCA模板题)
    Kattis
    SPOJ LEXSTR 并查集
    POJ 3159 Candies(spfa、差分约束)
    POJ 2240 Arbitrage (spfa判环)
    hdu 3974 Assign the task (线段树+树的遍历)
    POJ 2387 Til the Cows Come Home (dijkstra模板题)
    FZU 2150 Fire Game (高姿势bfs--两个起点)
    POJ 3414 Pots (dfs,这个代码好长啊QAQ)
    LightOJ 1422 Halloween Costumes
  • 原文地址:https://www.cnblogs.com/suyang-java/p/10358007.html
Copyright © 2011-2022 走看看