Prototype
Story
Clone itself.
Sheep Dolly is the first mammal to be cloned, so Dolly is a duplicate.
Image
Geni, Dolly the sheep 2016, CC BY-SA 4.0
UML
Implementation
Prototype.java
package com.hundredwordsgof.prototype;
/**
* Declares interface to copy it self.
*/
public abstract class Prototype implements Cloneable {
/**
* Copy method.
*
* @return copy of the object
* @throws CloneNotSupportedException
* exception
*/
abstract Prototype copyMe() throws CloneNotSupportedException;
}
ConcretePrototype.java
package com.hundredwordsgof.prototype;
public class ConcretePrototype extends Prototype {
/**
* Implements Prototype, meaning clone method.
*/
public Prototype copyMe() throws CloneNotSupportedException {
return (Prototype) this.clone();
}
}
Client.java
package com.hundredwordsgof.prototype;
/**
* Creates a new object by asking a Prototype to clone itself.
*/
public class Client {
private Prototype prototype;
public Client(Prototype prototype) {
this.prototype = prototype;
}
public Prototype operation() throws CloneNotSupportedException {
return prototype.copyMe();
}
}
Usage
PrototypeTest.java
package com.hundredwordsgof.prototype;
import static org.junit.Assert.assertNotEquals;
import org.junit.Test;
/**
* Test Prototype pattern.
*/
public class PrototypeTest {
@Test
public void testPrototype() throws CloneNotSupportedException {
// creates object of type Prototype
Prototype prototype = new ConcretePrototype();
// creates Client object(Prototype is "injected" via Constructor)
Client client = new Client(prototype);
// client creates new object(clone it self) of type Prototype
Prototype prototypeClone = client.operation();
// ensure that prototype and it's own clone are not same objects
assertNotEquals(prototype, prototypeClone);
}
}