-
Home
- Principles of object-oriented
- Immutable list structure
- Visitor design pattern
5. list visitor examples
Singleton constructor for list algorithm
/**
* Computes the length of the IList host.*/
public class GetLength implements IListAlgo {/**
* Singleton Pattern.*/
public static final GetLength Singleton = new GetLength();private GetLength() { } |
Empty and non-empty cases of algorithm
/*** Returns Integer(0).
* @param nu not used* @return Integer(0)
*/public Object emptyCase(
MTList host, Object... nu) {return 0;
} |
/*** Return the length of the host's rest
* plus 1.* @param nu not used.
* @return Integer>0.
*/public Object nonEmptyCase(
NEList host, Object... nu) {Object restLen
= host.getRest().execute(this);return 1 + (Integer)restLen);
} |
Singleton constructor for list algorithm
package listFW;/**
* Computes a String reprsentation of IList showing a left parenthesis followed* by elements of the IList separated by commas, ending with with a right parenthesis.
*/public class ToStringAlgo implements IListAlgo {
public static final ToStringAlgo Singleton = new ToStringAlgo();private ToStringAlgo() { } |
Empty and non-empty cases of algorithm
/*** Returns "()".
*/public Object emptyCase(
MTList host, Object... inp) {return "()";
} |
/*** Passes "(" + first to the rest of IList* and asks for help to complete the
* computation.*/
public Object nonEmptyCase(NEList host, Object... inp) {
return host.getRest().execute(ToStringHelper.Singleton,
"(" + host.getFirst());}
} //closing parenthesis for the class |
Singleton constructor for helper visitor
/**
* Helps ToStringAlgo compute the String representation of the rest of the list.*/
class ToStringHelper implements IListAlgo {public static final ToStringHelper Singleton = new ToStringHelper();
private ToStringHelper() { } |
Empty and non-empty cases of algorithm
/**
* Returns the accumulated String + ")".* At end of list: done!
*/public Object emptyCase(
MTList host, Object... acc) {return acc[0] + ")";} |
/**
* Continues accumulating the String* representation by appending ", " + first
* to acc and recurse!*/
public Object nonEmptyCase(NEList host, Object... acc) {
return host.getRest().execute(this,
acc[0]+ ", " + host.getFirst());
}} |
We now can use to ToStringAlgo to implement the toString() method of an IList.
package listFW;public class MTList implements IList {
/*** Singleton Pattern
*/public final static MTList Singleton
= new MTList();private MTList() { }
/*** Calls the empty case of the
* algorithm algo, passing to it* itself as the host parameter
* and the given input inp as the* input parameter.
* This method is marked as final* to prevent all subclasses from
* overriding it. Finalizing a* method also allows the compiler
* to generate more efficient* calling code.
*/public final Object execute(
IListAlgo algo,Object... inp) {
return algo.emptyCase(this, inp);
}public String toString() {
return (String)ToStringAlgo.Singleton.emptyCase(this);
}} |
package listFW;public class NEList implements IList {
/*** The first data element.
*/private Object _first;
/*** The rest or "tail" of this NEList.
* Data Invariant: _rest != null;*/
private IList _rest;/**
* Initializes this NEList to a given* first and a given rest.
* @param f This NEList's first element* @param r !=null; rest of this NEList.
*/public NEList(Object f, IList r) {
_first = f;_rest = r;
}/**
* Returns the first data element of* this NEList.
* Marked final for the above reasons.*/
public final Object getFirst() {return _first;
}/**
* Returns the rest of this NEList which* is an IList.
* Marked final for the above reasons.*/
public final IList getRest() {return _rest;
}/**
* Calls the nonEmptyCase method of the* IListAlgo parameter, passing itself
* as the host parameter and the given* input as the input parameter.
* Marked final for the above reasons.*/
public final Object execute(IListAlgo algo, Object... inp) {
return algo.nonEmptyCase(this, inp);}
public String toString() {return (String)ToStringAlgo
.Singleton.nonEmptyCase(this);}
} |
Download the above code
here .
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.