-
Home
- Principles of object-oriented
- Immutable list structure
- Visitor design pattern
Top-level abstract definition
interface IChef {
String cookVeggie(Vegetarian h, Integer n);String cookMeat(Carnivore h, Integer n);
} |
Concrete implementations
public class ChefWong implements IChef {public static final ChefWong Singleton
= new ChefWong();private ChefWong() {}
public String cookVeggie(Vegetarian h, Integer n) {return n + " portion(s) of " +
h.getCarrot() + ", " +h.getSalt();
}public String cookMeat(
Carnivore h, Integer n) {return n + " portion(s) of " +
h.getMeat() + ", " +h.getPepper();
}} |
public class ChefZung implements IChef {public static final ChefZung Singleton
= new ChefZung();private ChefZung() {}
public String cookVeggie(Vegetarian h, Integer n) {
return n + " portion(s) of " +h.getCorn() + ", " +
h.getSalt();}
public String cookMeat(Carnivore h, Integer n) {
return n + " portion(s) of " +h.getChicken() + ", " +
h.getPepper() +", " + h.getSalt();
}} |
Ordering food from the chef
To order food from an IChef , a Vegetarian object simply calls cookVeggie, passing itself as one of the parameters, while a Carnivore object would call cookMeat, passing itself as one of the parameters as well. The Vegetarian and Carnivore objects only deal with the IChef object at the highest level of abstraction and do not care what the concrete IChef is. The polymorphism machinery guarantees that the correct method in the concrete IChef will be called and the appropriate kind of food will be returned to the AEater caller The table below shows the code for Vegetarian and Carnivore, and sample client code using these classes.
Concrete implementations
public class Vegetarian extends AEater {
// other methods elidedpublic String order(IChef c, int n) {
return c.cookVeggie(this, n);}
} |
public class Carnivore extends AEater {
// other methods elidedpublic String order(IChef c, int n) {
return c.cookMeat(this, n);}
} |
Client code
public void party(AEater e, IChef c, int n) {
System.out.println(e.order(c, n));}
// blah blah blah...AEater John = new Carnivore();
AEater Mary = new Vegetarian();party(Mary, ChefWong.Singleton, 2);
party(John,ChefZung.Singleton, 1); |
The above design is an example of what is called the visitor pattern.
- The abstract class AEater and its concrete subclasses are called the hosts. The method public String order(IChef c, Object n) is called the hook method. Each concrete subclasses of AEater knows exactly to call the appropriate method on the IChef parameter, but does know and need not how the IChef concretely perforns its task. This allows an open-ended number of ways to cook the appropriate kinds of food.
- The chef interface IChef and all of its concrete implementations are called visitors. When an IChef performs cookMeat/cookVeggie, it knows that its host is a Carnivore/Vegetarian and can only call the methods of Carnivore/Vegetarian to cook a dish. Java static type checking will flag an error should there be a call on the host to getCarot in the method cookMeat. This is makes the interaction between hosts (Vegetarian and Carnivore) and visitors (IChef and all of its concrete implementations) much more robust.
Questions & Answers
A golfer on a fairway is 70 m away from the green, which sits below the level of the fairway by 20 m. If the golfer hits the ball at an angle of 40° with an initial speed of 20 m/s, how close to the green does she come?
A mouse of mass 200 g falls 100 m down a vertical mine shaft and lands at the bottom with a speed of 8.0 m/s. During its fall, how much work is done on the mouse by air resistance
Can you compute that for me. Ty
Jude
what is the dimension formula of energy?
Chemistry is a branch of science that deals with the study of matter,it composition,it structure and the changes it undergoes
Adjei
please, I'm a physics student and I need help in physics
Adjanou
chemistry could also be understood like the sexual attraction/repulsion of the male and female elements. the reaction varies depending on the energy differences of each given gender. + masculine -female.
Pedro
A ball is thrown straight up.it passes a 2.0m high window 7.50 m off the ground on it path up and takes 1.30 s to go past the window.what was the ball initial velocity
2. A sled plus passenger with total mass 50 kg is pulled 20 m across the snow (0.20) at constant velocity by a force directed 25° above the horizontal. Calculate (a) the work of the applied force, (b) the work of friction, and (c) the total work.
you have been hired as an espert witness in a court case involving an automobile accident. the accident involved car A of mass 1500kg which crashed into stationary car B of mass 1100kg. the driver of car A applied his brakes 15 m before he skidded and crashed into car B. after the collision, car A s
can someone explain to me, an ignorant high school student, why the trend of the graph doesn't follow the fact that the higher frequency a sound wave is, the more power it is, hence, making me think the phons output would follow this general trend?
Nevermind i just realied that the graph is the phons output for a person with normal hearing and not just the phons output of the sound waves power, I should read the entire thing next time
Joseph
Follow up question, does anyone know where I can find a graph that accuretly depicts the actual relative "power" output of sound over its frequency instead of just humans hearing
Joseph
"Generation of electrical energy from sound energy | IEEE Conference Publication | IEEE Xplore" ***ieeexplore.ieee.org/document/7150687?reload=true
Ryan
what are the types of wave
Maurice
fine, how about you?
Mohammed
A string is 3.00 m long with a mass of 5.00 g. The string is held taut with a tension of 500.00 N applied to the string. A pulse is sent down the string. How long does it take the pulse to travel the 3.00 m of the string?
Who can show me the full solution in this problem?
Got questions? Join the online conversation and get instant answers!
Source:
OpenStax, Principles of object-oriented programming. OpenStax CNX. May 10, 2013 Download for free at http://legacy.cnx.org/content/col10213/1.37
Google Play and the Google Play logo are trademarks of Google Inc.