设计模式之模板设计模式:
每次使用的时候只需要写一个子类来继承他的方法即可
* 模板设计模式的设计思想:程序由确定的部分和不确定的部分组成,这时可以把不确定的部分抽象出来,* 然后对外开放一个可以访问的方式在使用的时候可以由其子类来继承父类实现重写抽象方法,来完成不确定的部分
例子:计算一个程序的执行时间
public static void main(String[] args)
{
GetTime getTime = new SubTime();
getTime.getTime();
// new GetTime().getTime();
}
}
abstract class GetTime
{
public void getTime()
{
//获取系统当前时间
long currentTime = System.currentTimeMillis();
//随便执行一个程序,计算循环的执行时间
fun();//将要执行的程序抽取出来封装成方法后,调用
//获取程序执行完毕的当前时间
long finishTime = System.currentTimeMillis();
System.out.println("程序执行时间:"+(finishTime-currentTime)+"毫秒");
}
//把要执行的程序抽取成方法
//定义成抽象方法,强制子类去重写这个方法
public abstract void fun();
}
//使用继承
class SubTime extends GetTime
{
@Override
public void fun() {
// TODO Auto-generated method stub
temp();
}
public void temp()
{
for (int i = 0; i < 20000; i++)
{
System.out.println(i);
}
}
复合:
一个类中有另一个类中的对象作为成员变量
例如:1.人类 吃
* 2.男人类 姓名 性别 有女朋友 吃肉 介绍女朋友是谁
* 3.女人类 姓名 性别 有男朋友 吃素 介绍男朋友是谁
* 4.男人挣钱给女朋友花(接口实现)
public static void main(String[] args)
{
Man man = new Man("张三", "男");
Woman woman = new Woman("李四", "女");
man.setWoman(woman);
man.sayHi();
woman.setMan(man);
woman.sayHi();
//通过男人类的对象获取女人类的对象
Woman woman1 = man.getWoman();
//用获取到的对象来调取该对象中的方法,可以调用所有的方法
woman1.zhengRong("鼻子");
man.makeMoney();
woman1.getMan().makeMoney();
}
private String name;
private String gender;
public abstract void eat();//抽象方法
public Person(String name,String gender)
{
this.gender = gender;
this.name = name;
}
//set/get方法
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
public void setGender(String gender)
{
this.gender = gender;
}
public String getGender()
{
return this.gender;
}
}
class Man extends Person implements MakeMoney
{
//定义一个成员变量,是女人类的对象
Woman woman;
public Man(String name,String gender)
{
super(name, gender);
}
//set/get方法
public void setWoman(Woman woman)
{
this.woman = woman;
}
public Woman getWoman()
{
return this.woman;
}
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("吃肉");
}
public void sayHi()
{
System.out.println("我是"+getName()+",这我女朋友"+woman.getName());
}
@Override
public void makeMoney() {
// TODO Auto-generated method stub
System.out.println("我"+getName()+"挣钱,你"+woman.getName()+"来花");
}
}
class Woman extends Person
{
private Man man;
//set/get方法
public void setMan(Man man)
{
this.man = man;
}
public Man getMan()
{
return this.man;
}
public Woman(String name, String gender)
{
super(name, gender);
}
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("吃素");
}
public void sayHi()
{
System.out.println("男朋友"+this.man.getName());
}
public void zhengRong(String body) //整容
{
System.out.println("我是"+this.getName()+",我要整"+body);
sayHi();
}
}
interface MakeMoney//接口
{
public abstract void makeMoney();
}