Created
October 15, 2015 10:12
-
-
Save cardil/ebda883f7b46d2310128 to your computer and use it in GitHub Desktop.
Example of composition usage in Java 7 & 8 insead of JavaScript. Follow up to: https://www.youtube.com/watch?v=wfMtDGfHWpA
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
javac CompositionJava7LombokExample.java -cp ~/.m2/repository/org/projectlombok/lombok/1.16.6/lombok-1.16.6.jar | |
java -cp ./ Main | |
# Bark, Bark! | |
# Driving to the destination... | |
# What a day! What a lovely day! | |
# What a day! What a lovely day! | |
# Bark, Bark! | |
# Bark, Bark! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/usr/lib/jvm/java-8-oracle/bin/javac CompositionJava8Example.java | |
/usr/lib/jvm/java-8-oracle/bin/java -cp ./ Main | |
# Bark, Bark! | |
# Driving to the destination... | |
# What a day! What a lovely day! | |
# What a day! What a lovely day! | |
# Bark, Bark! | |
# Bark, Bark! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import lombok.Delegate; | |
interface Barker { | |
void bark(); | |
class DefaultImpl implements Barker { | |
@Override | |
public void bark() { | |
System.out.println("Bark, Bark!"); | |
} | |
} | |
} | |
interface Pooper { | |
void poop(); | |
class DefaultImpl implements Pooper { | |
@Override | |
public void poop() { | |
System.out.println("<dump droped>"); | |
} | |
} | |
} | |
interface Meower { | |
void meow(); | |
class DefaultImpl implements Meower { | |
@Override | |
public void meow() { | |
System.out.println("Meow!"); | |
} | |
} | |
} | |
interface Cleaner { | |
void clean(); | |
class DefaultImpl implements Cleaner { | |
@Override | |
public void clean() { | |
System.out.println("Cleaning for effect..."); | |
} | |
} | |
} | |
interface Driver { | |
void drive(); | |
class DefaultImpl implements Driver { | |
@Override | |
public void drive() { | |
System.out.println("Driving to the destination..."); | |
} | |
} | |
} | |
interface Killer { | |
void kill(); | |
class DefaultImpl implements Killer { | |
@Override | |
public void kill() { | |
System.out.println("What a day! What a lovely day!"); | |
} | |
} | |
} | |
class Dog implements Barker, Pooper { | |
@Delegate | |
private Barker barker = new Barker.DefaultImpl(); | |
@Delegate | |
private Pooper pooper = new Pooper.DefaultImpl(); | |
} | |
class Cat implements Meower, Pooper { | |
@Delegate | |
private Pooper pooper = new Pooper.DefaultImpl(); | |
@Delegate | |
private Meower meower = new Meower.DefaultImpl(); | |
} | |
class CleaningRobot implements Driver, Cleaner { | |
@Delegate | |
private Driver driver = new Driver.DefaultImpl(); | |
@Delegate | |
private Cleaner cleaner = new Cleaner.DefaultImpl(); | |
} | |
class MurderRobot implements Driver, Killer { | |
@Delegate | |
private Driver driver = new Driver.DefaultImpl(); | |
@Delegate | |
private Killer killer = new Killer.DefaultImpl(); | |
} | |
class MurderRobotDog implements Driver, Killer, Barker { | |
@Delegate | |
private Driver driver = new Driver.DefaultImpl(); | |
@Delegate | |
private Barker barker = new Barker.DefaultImpl(); | |
@Delegate | |
private Killer killer = new Killer.DefaultImpl(); | |
} | |
class Main { | |
public static void main(String[] args) { | |
MurderRobotDog mrd = new MurderRobotDog(); | |
mrd.bark(); | |
mrd.drive(); | |
mrd.kill(); | |
Killer killer = mrd; | |
killer.kill(); | |
Barker barker = mrd; | |
barker.bark(); | |
barker = new Dog(); | |
barker.bark(); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
interface Barker { | |
default void bark() { | |
System.out.println("Bark, Bark!"); | |
} | |
} | |
interface Pooper { | |
default void poop() { | |
System.out.println("<dump droped>"); | |
} | |
} | |
interface Meower { | |
default void meow() { | |
System.out.println("Meow!"); | |
} | |
} | |
interface Driver { | |
default void drive() { | |
System.out.println("Driving to the destination..."); | |
} | |
} | |
interface Cleaner { | |
default void clean() { | |
System.out.println("Cleaning for effect..."); | |
} | |
} | |
interface Killer { | |
default void kill() { | |
System.out.println("What a day! What a lovely day!"); | |
} | |
} | |
class Dog implements Barker, Pooper { | |
} | |
class Cat implements Meower, Pooper { | |
} | |
class CleaningRobot implements Driver, Cleaner { | |
} | |
class MurderRobot implements Driver, Killer { | |
} | |
class MurderRobotDog implements Driver, Killer, Barker { | |
} | |
class Main { | |
public static void main(String[] args) { | |
MurderRobotDog mrd = new MurderRobotDog(); | |
mrd.bark(); | |
mrd.drive(); | |
mrd.kill(); | |
Killer killer = mrd; | |
killer.kill(); | |
Barker barker = mrd; | |
barker.bark(); | |
barker = new Dog(); | |
barker.bark(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment