标签:abs 9.png 设计 extends 接口 .com end max 思路
/**
* 抽象动物基类,动物一些基本技能
* @author lizhibiao
* @date 2019/2/1 15:38
*/
public abstract class Animal
{
/**
* 动物技能抽象方法
*/
public abstract void skill();
}
/**
* 具体的狗对象,实现抽象父类
* @author lizhibiao
* @date 2019/2/1 15:22
*/
public class Dog extends Animal
{
@Override
public void skill()
{
System.out.println("动物都会跑");
}
}
/**
* 抽象的技能装饰类
* 注意这里一定要重新抽象类的抽象方法
* @author lizhibiao
* @date 2019/2/1 15:31
*/
public abstract class DecoratorBehavior extends Animal
{
private Animal animal;
/**
* 普通的实例化方法,这里传入的是Animal的子类,也就是具体对象
* @param animal animal
*/
public void setAnimal(Animal animal)
{
//多态,Animal指向子类的实例
//为什么可以多态,因为继承关系可以向上转型,也就是子类可以向上转型成父类,除了能够引用父类的共性外,还可以使用子类强大的功能。
this.animal = animal;
}
/**
* 重新实现技能方法,这里是调用具体对象的方法(例如,当前是狗类,那么调用的是狗类的“动物都会跑”)
*/
@Override
public void skill()
{
if (null != animal)
{
//这里调用的是具体对象的skill()方法
//例如,当前的animal是狗类,那么调用的是狗的skill
//例如,当前的animal是猫类,那么调用的是猫的skill
animal.skill();
}
}
}
/**
* 狗的看家技能
* @author lizhibiao
* @date 2019/2/1 15:53
*/
public class Guard extends DecoratorBehavior
{
@Override
public void skill()
{
//先实现父类的方法
super.skill();
canGuard();
}
private void canGuard()
{
System.out.println("狗还会看家");
}
}
/**
* 睡觉技能
* @author lizhibiao
* @date 2019/2/1 16:39
*/
public class Sleep extends DecoratorBehavior
{
@Override
public void skill()
{
//实现父类的所有技能
super.skill();
sleep();
}
/**
* 睡觉方法
*/
private void sleep()
{
System.out.println("睡觉真是件舒服的事情!");
}
}
/**
* 客户端测试类
* @author lizhibiao
* @date 2019/2/1 16:17
*/
public class Client
{
public static void main(String[] args)
{
//先new一个具体狗对象类
Dog dog = new Dog();
//new一个警戒技能
Guard guard = new Guard();
//子类狗调用父类DecoratorBehavior的setAnimal()方法,将狗对象类传入,多态
//此时的DecoratorBehavior的成员属性Animal已经是子类狗对象类
guard.setAnimal(dog);
//new一个睡觉技能
Sleep sleep = new Sleep();
//将警戒对象传入父类DecoratorBehavior的setAnimal()方法
//此时的DecoratorBehavior的成员属性Animal已经变成警戒对象
sleep.setAnimal(guard);
//按照Dog的skill()方法--->Guard的canGuard()方法--->sleep的sleep()顺序执行
sleep.skill();
}
}
/**
* 睡觉技能
* @author lizhibiao
* @date 2019/2/1 16:39
*/
public class Sleep extends DecoratorBehavior
{
@Override
public void skill()
{
//实现父类的所有技能
super.skill();
sleep();
}
/**
* 狗的看家技能
* @author lizhibiao
* @date 2019/2/1 15:53
*/
public class Guard extends DecoratorBehavior
{
@Override
public void skill()
{
//先实现父类的方法
super.skill();
canGuard();
}
标签:abs 9.png 设计 extends 接口 .com end max 思路
原文地址:https://www.cnblogs.com/lizb0907/p/10346563.html