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来调用静态变量和方法。

浙公网安备 33010602011771号