java的23种设计模式之模板模式

今天学习了java的另外一种设计模式,模板模式。

大致意思是将部分功能以具体方法以及具体构造函数的形式实现,然后用一些抽象方法来让子类实现剩余的功能。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的功能有不同的实现。这就是模板方法模式的用意。

对以前的代码大致修改了一下,让其符合新的模式,并对新学习到的内容进行了注释。

package 面向对象;
//在原有基础上增加了抽象类,用了模板设计模式。
 abstract class Student 
{
    
        protected String name;//protect它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西。
        protected int number;
        protected String sex;
        protected boolean learn;
        protected String a;
    Student()
     {
         name="未知";
         number=000;
         sex="未知";
         learn=false;
         a="未知";
     }
     public final void setName(String name)//final是一个关键字,在方法中存在表示此方法不能重写。
     {
         this.name=name;
     }
     public final void setNumber(int number)
     {
         this.number=number;
     }
     public final void setSex(String sex)
     {
         this.sex=sex;
     }
     public final void setLearn(boolean learn)
     {
         this.learn=learn;
     }
     abstract void scan();    //抽象方法。
}     
     final class Method extends Student//final在类中用于此类不可以继承。在变量中表示此变量只能赋值一次,被final修饰的要大写,分隔用_
     {
         
         void scan()//在子类重写这个抽象方法。重写方法时,必须子类的权限大于等于父类。
         {
             if(super.learn==true)
                {
                    a="在学习";    
                }
                else
                {
                    a="不在学习";
                }    
                 System.out.print("姓名:"+super.name+" 学号:"+super.number+" 性别;"+super.sex+" 是否在学习:"+this.a);
         }
     }
    //super代表父类的应用。
    
 public class Data
 {
     public static void main(String[] arg)
     {
         //super();
         Student XiaoMin=new Method();//这里面默认添加了父类的构造函数super(),如果父类构造函数不是默认的,有形式参数的,必须在创建子类对象时,写出来。
         XiaoMin.setName("小明");//同样的在子类的构造函数时,如果父类构造函数不是默认的,有形式参数的,必须写出来。
         XiaoMin.setNumber(13023);
         XiaoMin.setSex("男");
         XiaoMin.setLearn(true);
         XiaoMin.scan();
     }
 }

 在学习中又遇到一个静态和父类子类结合的不理解的问题,通过查阅api文档,总结如下:

在可以调用的权限下,父类的静态方法和静态变量是可以被父类的类名.xx或者子类创建的实例名.xx调用的。

比如上面这个代码,父类添加一个静态变量  protect static x ;那么可以被父类Student.x或者子类创建的实例XiaoMin.x 调用,

但是注意不能被super或者this来调用静态变量和方法。

posted @ 2017-07-13 15:54  来的有点抖哟  阅读(304)  评论(0)    收藏  举报