抽象类的实际应用--模板设计模式(理解即可)

本文通过一个按钮控制不同对象行为的实例,介绍了抽象类在Java中的使用方式及其作为模板的重要作用。示例中定义了一个抽象类Action,该类规定了子类必须实现的方法,并通过具体子类展示了如何根据不同对象特性来实现这些抽象方法。
摘要由CSDN通过智能技术生成

抽象类的最大特点在于强制规定了子类的实现结构,那么除了这一特点之外,抽象类更多的情况下还饿可以起到一个模板的作用。 

下面做个简单的分析

   人=吃饭+工作+睡觉;

猪=吃饭+睡觉;

机器人=吃饭+工作。 

那么现在假设有一个按钮控制command(方法),一旦传入二兰某些指令之后就可以进行相应的处理。

abstract class Action{//描述的是一个抽象的行为
	public static final int EAT=1;
	public static final int SLEEP=5;
	public static final int WORK=10;
public void command(int cmd) {
	switch(cmd) {
	case EAT:
		this.eat();
		break;
	case SLEEP:
		this.sleep();
		break;
	case WORK:
		this.work();
		break;
	case EAT+SLEEP+WORK:
		this.eat();
	this.sleep();
	this.work();
	break;
	}
}
	//不确定具体的实现,但是行为应该定义好
	public abstract void eat();
	public abstract void sleep();
	public abstract void work();
}
public class TestDemo {

	public static void main(String[] args) {
		

	}

}

范例:定义各个行为的子类

abstract class Action{//描述的是一个抽象的行为
	public static final int  EAT=1;
	public static final int SLEEP=5;
	public static  final int WORK=10;
	public void command(int cmd) {	
		switch(cmd) {
		case EAT:
			this.eat();
			break;
		case SLEEP:
			this.sleep();
			break;
		case WORK:
			this.work();
			break;
		case EAT+SLEEP+WORK:
			this.eat();this.sleep();this.work();
			break;
		}
	}
	public abstract void eat();
	public abstract void sleep();
	public abstract void work();
	}
class Human extends Action{
	public  void eat() {System.out.println("在凳子上吃饭");}
	public  void sleep() {System.out.println("在床上吃饭");}
	public  void work() {System.out.println("努力奋斗");}
}
class Pig extends Action{
	public  void eat() {System.out.println("在槽里吃");}
	public  void sleep() {System.out.println("原地睡");}
	public  void work() {}
}
class Robot extends Action{
	public  void eat() {System.out.println("补充能量");}
	public  void sleep() {}
	public  void work() {System.out.println("机器人不停工作");}
}

public class TestDemo {

	public static void main(String[] args) {
		
	}

}

范例:调用各自的行为操作

public class TestDemo {

	public static void main(String[] args) {
		fun(new Human());//抽象类的使用必须要通过子类进行对象实例化 
		fun(new Pig());
		fun(new Robot());
	}
	public static void fun(Action action) {
		action.command(action.EAT+action.SLEEP+action.WORK);
	}

}

实际上通过此程序定义的结构你可以清楚的发现一个问题:

     |~如果抽象类在实际的使用过程之中会定义一些固化的模式

(上面的command()方法按钮),它只能接受几种特定的指示

      |~但是每种指令的具体实现由子类负责完成,父类只做了方法的约定。


最具有代表是的就是后面要学习的Servlet


1.抽象类虽然定义了子类必须要做的事情,但是抽象类依然会存在会有单继承局限。

2.抽象类的使用必须要通过子类进行对象实例化 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值