小白谈谈模板模式

概念

模板模式就是通过一个模板定义一些方法,然后再根据这个模板具体实现一些特定的功能。模板的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。

实现

案例:某一玩具工厂要开始生产玩具,做生产的总得有的方案吧,或者说总得按照某一个模板进行生产吧。某玩具工厂制作玩具娃娃的基础设计模板,这个模板必须配备两个功能,一个是发出声音,一个是会做动作,这样才能配合小孩子玩耍:

代码如下:

/**
 * 定义一个玩具娃娃的抽象类,相当于一个模板
 */
public abstract class Doll {

    //定义一个发出响声的方法
    public abstract void cry();

    //定义一个表示娃娃的动作的方法
    public abstract void behavior();

    //定义玩具娃娃是怎么跟主人玩耍的
    public void play(){
        cry();
        behavior();
    }
}

可是单单只是这样,哪能吸引小朋友的眼光呢,可能还得有个造型,根据这个造型,具体实现模板中的功能,著名的设计师ctb拿着这个模板,晚上去进行加工和修改想出了两套方案:

方案一:

/**
 * 定义一个狗的类,具体实现玩具娃娃的抽象方法
 */
public class DogDoll extends  Doll {
    @Override
    public void cry() {
        System.out.print("汪汪汪   ");
    }

    @Override
    public void behavior() {
        System.out.print("握手手");
    }
}

方案二:

/**
 * 定义一个猫娃娃的类,具体实现玩具娃娃
 */
public class CatDoll extends Doll {
    @Override
    public void cry() {
        System.out.print("喵喵喵   ");
    }

    @Override
    public void behavior() {
        System.out.print("摇尾巴");
    }
}

第二天,ctb给老板看了两套方案,老板十分满意,觉得公司要大赚了,但是经理小明说,这关看方案不行啊,还得看做出来的效果如何,于是我们来到工厂进行测试:

public class Factory {

    public static void main(String[] args) {

        //通过玩具模板,定义玩具猫
        Doll cat = new CatDoll();

        //通过玩具模板,定义玩具狗
        Doll dog = new DogDoll();

        System.out.print("我是玩具猫,我会");
        cat.play();
        System.out.println();
        System.out.print("我是玩具狗,我会");
        dog.play();
    }
}

实验结果:

在这里插入图片描述


优点:通过提取公共的部分进行封装,然后再让子类进行实现,减少代码冗余,增加代码可读性,便于维护

缺点:当如果要实现的子类过多时,需要写的类就会很多,使系统更加庞大


本文的代码:https://pan.baidu.com/s/1A52ZMyYE1p7zTLLsg-2R_A
提取码:fifq

发布了48 篇原创文章 · 获赞 0 · 访问量 654

猜你喜欢

转载自blog.csdn.net/weixin_44943485/article/details/105272933