SHARE
TWEET
Untitled
a guest
Jan 29th, 2018
51
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
- public interface BirdType {}
- public class BlueJay implements BirdType {}
- public class Cardinal implements BirdType {}
- public class Canary implements BirdType {}
- public interface BirdCamera<BT extends BirdType> {}
- public interface BirdCall<BT extends BirdType> {}
- public class BlueJayCamera implements BirdCamera<BlueJay> {}
- public class CardinalCamera implements BirdCamera<Cardinal> {}
- public class CanaryCamera implements BirdCamera<Canary> {}
- public class BlueJayCall implements BirdCall<BlueJay> {}
- public class CardinalCall implements BirdCall<Cardinal> {}
- public class CanaryCall implements BirdCall<Canary> {}
- public interface Photographer
- <BT extends BirdType,
- CAM extends BirdCamera<BT>,
- CAL extends BirdCall<BT>>
- {
- CAM getPhotographersCamera();
- CAL getPhotographersBirdCall();
- void examineCamera(CAM camera);
- }
- public class BlueJayPhotographer implements Photographer<BlueJay, BlueJayCamera, BlueJayCall> {
- @Override
- public BlueJayCamera getPhotographersCamera() {
- //Do bluejay specific logic
- return new BlueJayCamera();
- }
- @Override
- public BlueJayCall getPhotographersBirdCall() {
- //Do bluejay specific logic
- return new BlueJayCall();
- }
- @Override
- public void examineCamera(BlueJayCamera camera) {
- //Do bluejay specific logic
- }
- }
- public class ConfusedPhotographer implements Photographer<BlueJay, CardinalCamera, CanaryCall>
- public class PhotographerProvider {
- public Photographer get(int birdCode) {
- if (birdCode == 0) {
- return new BlueJayPhotographer();
- }
- else if (birdCode == 1) {
- return new CardinalPhotographer();
- }
- else if (birdCode == 2) {
- return new CanaryPhotographer();
- }
- else {
- throw new IllegalArgumentException("Unsupported bird code: " + birdCode);
- }
- }
- }
- public void importantMethod(PhotographerProvider photographerProvider) {
- // blah blah logic goes here
- int mostCommonBirdType = 1;
- Photographer typicalTourist = photographerProvider.get(mostCommonBirdType);
- BirdCamera cam = typicalTourist.getPhotographersCamera();
- typicalTourist.examineCamera(cam);
- // blah blah more logic here
- }
RAW Paste Data

