I like dolphin! It is such an intelligent, playful and
social animal. It can learn so many tricks, tail-walking, dancing, jumping, you
name it. It can even innovate – creating new tricks on their own! Of course, if
you have the world’s cutest bottom as a panda does, you do not have to learn
tricks to please the crowd – hey, life is not fair and beauty is not just
skip-deep.
I am going to use dolphin and panda in my demo, if you think
it is silly, bear with me.
In this demo:
Animal is an abstract class with an abstract
method playTricks(),Panda and Dolphin extends from
it. Show invokes Animal.playTricks() to startAShow().
Animals have a Trainer. Notice how they are inside
different packages, it is going to play a role in your Aspect.
public abstract class Animal {private String name;private Trainer trainer;public Animal(String name, Trainer trainer) {super();this.name = name;this.trainer = trainer;}public String getName() {return name;}public Trainer getTrainer() {return trainer;}public abstract void playTricks() throws Exception;}
public class Dolphin extends Animal {
private List friends = new ArrayList();
public Dolphin(String name,
Trainer trainer) {
super(name, trainer);
friends.add(trainer);
//a bit
narcissistic, friends with himself 100 times
for (int i = 0; i < 100;
i++) {
friends.add(this);
}
}
@Override
public void playTricks() throws Exception {
shakeHands(this.getTrainer());
tailWalk(10);
for (int i = 0; i < 5; i++)
{
backflip(i);
}
}
private void addFriend(Object
friend) {
this.friends.add(friend);
}
private void tailWalk(int length) {
System.out.println(this.getName() + " is tail
walking " + length + " meters ...");
}
private void backflip(int index) throws Exception {
System.out.println(this.getName() + " is
backflipping " + index + " time ...");
//mimic slow methods
Thread.sleep(1
* 1000);
}
private void shakeHands(Trainer
trainer) {
System.out.println(this.getName() + " is shaking
hands with " + trainer.getName() + " ...");
trainer.award(this);
}
}
public class Panda extends Animal{
public Panda(String name,
Trainer trainer) {
super(name, trainer);
}
@Override
public void playTricks() {
beingCute();
}
private String beingCute(){
return "being
cute...";
}
}
public class Show {
public void startAShow(String
type) throws Exception {
Trainer
trainer;
Animal
animal;
if (type.equals("dolphin")) {
trainer
= new Trainer("Lucy");
animal
= new Dolphin("Noodle", trainer);
}
else {
trainer
= new Trainer("xiaowang");
animal
= new Panda("lingling", trainer);
}
animal.playTricks();
}
public static void main(String[] args) throws Exception {
new
Show().startAShow(args[0]);
}
}
No comments:
Post a Comment