├── .gitignore └── src ├── abstractFactory ├── GUIBuilder.java ├── Main.java ├── factories │ ├── AbstractWidgetFactory.java │ ├── ConcreteMSWidgetFactory.java │ └── ConcreteMacOSWidgetFactory.java └── products │ ├── button │ ├── AbstractButton.java │ ├── ConcreteMSButton.java │ └── ConcreteMacOSButton.java │ ├── menu │ ├── AbstractMenu.java │ ├── ConcreteMSMenu.java │ └── ConcreteMacOSMenu.java │ └── window │ ├── AbstractWindow.java │ ├── ConcreteMSWindow.java │ └── ConcreteMacOSWindow.java ├── adapter ├── AudioPlayer.java ├── Main.java ├── MediaAdapter.java └── adaptee │ ├── AdvancedMediaPlayer.java │ ├── MediaPlayer.java │ ├── Mp4Player.java │ └── VlcPlayer.java ├── bridge ├── Main.java ├── abstraction │ ├── Circle.java │ └── Shape.java └── implementor │ ├── DrawAPI.java │ ├── DrawRedCircleAPI.java │ └── GreenCircle.java ├── builder ├── AnimalBuilder.java ├── Main.java └── product │ ├── Animal.java │ ├── BeakedHead.java │ ├── Characteristic.java │ ├── DefaultHead.java │ ├── DefaultTail.java │ ├── Foot.java │ ├── Habitat.java │ ├── HairTail.java │ ├── Head.java │ ├── Land.java │ ├── Paddle.java │ ├── Paw.java │ ├── Perriered.java │ ├── Tail.java │ └── Water.java ├── chainOfResponsibility ├── AbstractLogger.java ├── ConsoleLogger.java ├── ErrorLogger.java ├── FileLogger.java └── Main.java ├── command ├── Invoker.java ├── Main.java ├── command │ ├── AbstractCommand.java │ ├── TurnOffCommand.java │ ├── TurnOnCommand.java │ ├── VolumeMinusCommand.java │ └── VolumePlusCommand.java └── request │ ├── ElectronicDevice.java │ ├── Player.java │ ├── Radio.java │ └── TV.java ├── composite ├── Main.java ├── example │ ├── Body.java │ ├── Div.java │ ├── H1.java │ ├── Head.java │ ├── Html.java │ ├── P.java │ └── Title.java ├── output result.txt └── pattern │ ├── Component.java │ ├── Composite.java │ └── Leaf.java ├── decorator ├── basic │ ├── Main.java │ ├── Pizza.java │ ├── SimplePizza.java │ └── ToppingDecorator.java └── concreteDecorator │ ├── Beacon.java │ ├── Chicken.java │ ├── Meat.java │ ├── Mozzarella.java │ ├── Mussel.java │ ├── Pineapple.java │ └── TomatoSauce.java ├── facade ├── Main.java ├── ShapeFacade.java └── subsystem │ ├── Circle.java │ ├── Line.java │ ├── Rectangular.java │ ├── Shape.java │ └── Triangle.java ├── factory ├── Main.java ├── ToyFactory.java └── product │ ├── Constructor.java │ ├── Helicopter.java │ ├── Tank.java │ └── Toy.java ├── filter ├── Main.java ├── Tablet.java └── filters │ ├── AbstractFilter.java │ ├── AndFilter.java │ ├── Filter3G.java │ ├── OrFilter.java │ ├── ProcessorFilter.java │ ├── RamFilter.java │ └── VideoAdapterFilter.java ├── flyweight ├── Circle.java ├── Main.java ├── Shape.java └── ShapeFactory.java ├── interpreter ├── AndExpression.java ├── Expression.java ├── Main.java ├── OrExpression.java └── TerminalExpression.java ├── iterator ├── Main.java ├── chains │ ├── BlackMetalBand.java │ ├── Container.java │ └── VikingMetalBand.java ├── entity │ ├── Musician.java │ └── Role.java └── iterator │ └── Iterator.java ├── mediator ├── Chat.java ├── Main.java └── User.java ├── memento ├── CareTaker.java ├── Main.java ├── Memento.java └── Originator.java ├── observer ├── BinaryObserver.java ├── HexaObserver.java ├── Main.java ├── Observer.java ├── OctalObserver.java └── Subject.java ├── prototype ├── Main.java └── button │ ├── ActionButton.java │ ├── Button.java │ ├── ExitButton.java │ └── StartButton.java ├── proxy ├── Image.java ├── ImageProxy.java ├── Main.java └── RealImage.java ├── singleton ├── Main.java └── Singleton.java ├── state ├── Main.java └── model │ ├── Context.java │ ├── StartState.java │ ├── State.java │ └── StopState.java ├── strategy ├── AbstractStrategy.java ├── ConcreteStrategyAdd.java ├── ConcreteStrategyDiv.java ├── ConcreteStrategyMinus.java ├── ConcreteStrategyMod.java ├── ConcreteStrategyMultiply.java ├── ConcreteStrategyPower.java ├── Context.java └── Main.java ├── templateMethod ├── Main.java └── template │ ├── Game.java │ ├── WorldOfTanks.java │ └── Wow.java └── visitor ├── Main.java ├── visitable ├── AbstractChemical.java ├── Alkane.java ├── Carbon.java ├── Oxygen.java └── Visitable.java └── visitor ├── FormulaReader.java └── Visitor.java /.gitignore: -------------------------------------------------------------------------------- 1 | *.xml 2 | .idea/.name 3 | *.iml -------------------------------------------------------------------------------- /src/abstractFactory/GUIBuilder.java: -------------------------------------------------------------------------------- 1 | package abstractFactory; 2 | 3 | import abstractFactory.factories.AbstractWidgetFactory; 4 | 5 | /** 6 | * Created by olsh on 12/17/2015. 7 | */ 8 | public class GUIBuilder 9 | { 10 | public void buildElements(AbstractWidgetFactory abstractWidgetFactory) 11 | { 12 | abstractWidgetFactory.createWindow(); 13 | abstractWidgetFactory.createButton(); 14 | abstractWidgetFactory.createMenu(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/abstractFactory/Main.java: -------------------------------------------------------------------------------- 1 | package abstractFactory; 2 | 3 | import abstractFactory.factories.AbstractWidgetFactory; 4 | import abstractFactory.factories.ConcreteMSWidgetFactory; 5 | import abstractFactory.factories.ConcreteMacOSWidgetFactory; 6 | 7 | public class Main { 8 | 9 | public static void main(String[] args) { 10 | GUIBuilder guiBuilder=new GUIBuilder(); 11 | System.out.println("abstractWidgetFactory becomes concreteMSWidgetFactory"); 12 | AbstractWidgetFactory abstractWidgetFactory=new ConcreteMSWidgetFactory(); 13 | guiBuilder.buildElements(abstractWidgetFactory); 14 | System.out.println("abstractWidgetFactory becomes concreteMacOSWidgetFactory"); 15 | abstractWidgetFactory=new ConcreteMacOSWidgetFactory(); 16 | guiBuilder.buildElements(abstractWidgetFactory); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/abstractFactory/factories/AbstractWidgetFactory.java: -------------------------------------------------------------------------------- 1 | package abstractFactory.factories; 2 | 3 | import abstractFactory.products.button.AbstractButton; 4 | import abstractFactory.products.menu.AbstractMenu; 5 | import abstractFactory.products.window.AbstractWindow; 6 | 7 | /** 8 | * Created by olsh on 12/17/2015. 9 | */ 10 | public interface AbstractWidgetFactory 11 | { 12 | public AbstractWindow createWindow(); 13 | public AbstractButton createButton(); 14 | public AbstractMenu createMenu(); 15 | } 16 | -------------------------------------------------------------------------------- /src/abstractFactory/factories/ConcreteMSWidgetFactory.java: -------------------------------------------------------------------------------- 1 | package abstractFactory.factories; 2 | 3 | import abstractFactory.products.button.AbstractButton; 4 | import abstractFactory.products.button.ConcreteMSButton; 5 | import abstractFactory.products.menu.*; 6 | import abstractFactory.products.window.AbstractWindow; 7 | import abstractFactory.products.window.ConcreteMSWindow; 8 | 9 | /** 10 | * Created by olsh on 12/17/2015. 11 | */ 12 | public class ConcreteMSWidgetFactory implements AbstractWidgetFactory 13 | { 14 | @Override 15 | public AbstractWindow createWindow() 16 | { 17 | AbstractWindow window = new ConcreteMSWindow(); 18 | System.out.println("creation of "+window.printWindowType()); 19 | return window; 20 | } 21 | 22 | @Override 23 | public AbstractButton createButton() 24 | { 25 | AbstractButton button = new ConcreteMSButton(); 26 | System.out.println("creation of "+button.printButtonType()); 27 | return button; 28 | } 29 | 30 | @Override 31 | public AbstractMenu createMenu() 32 | { 33 | AbstractMenu menu = new ConcreteMSMenu(); 34 | System.out.println("creation of "+menu.printMenuType()); 35 | return menu; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/abstractFactory/factories/ConcreteMacOSWidgetFactory.java: -------------------------------------------------------------------------------- 1 | package abstractFactory.factories; 2 | 3 | import abstractFactory.products.button.AbstractButton; 4 | import abstractFactory.products.button.ConcreteMacOSButton; 5 | import abstractFactory.products.menu.*; 6 | import abstractFactory.products.window.AbstractWindow; 7 | import abstractFactory.products.window.ConcreteMacOSWindow; 8 | 9 | /** 10 | * Created by olsh on 12/17/2015. 11 | */ 12 | public class ConcreteMacOSWidgetFactory implements AbstractWidgetFactory 13 | { 14 | @Override 15 | public AbstractWindow createWindow() 16 | { 17 | AbstractWindow window = new ConcreteMacOSWindow(); 18 | System.out.println("creation of "+window.printWindowType()); 19 | return window; 20 | } 21 | 22 | @Override 23 | public AbstractButton createButton() 24 | { 25 | AbstractButton button = new ConcreteMacOSButton(); 26 | System.out.println("creation of "+button.printButtonType()); 27 | return button; 28 | } 29 | 30 | @Override 31 | public AbstractMenu createMenu() 32 | { 33 | AbstractMenu menu = new ConcreteMacOSMenu(); 34 | System.out.println("creation of "+menu.printMenuType()); 35 | return menu; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/abstractFactory/products/button/AbstractButton.java: -------------------------------------------------------------------------------- 1 | package abstractFactory.products.button; 2 | 3 | /** 4 | * Created by olsh on 12/17/2015. 5 | */ 6 | public interface AbstractButton 7 | { 8 | String printButtonType(); 9 | } 10 | -------------------------------------------------------------------------------- /src/abstractFactory/products/button/ConcreteMSButton.java: -------------------------------------------------------------------------------- 1 | package abstractFactory.products.button; 2 | 3 | /** 4 | * Created by olsh on 12/17/2015. 5 | */ 6 | public class ConcreteMSButton implements AbstractButton 7 | { 8 | @Override 9 | public String printButtonType() 10 | { 11 | return "MS Button"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/abstractFactory/products/button/ConcreteMacOSButton.java: -------------------------------------------------------------------------------- 1 | package abstractFactory.products.button; 2 | 3 | /** 4 | * Created by olsh on 12/17/2015. 5 | */ 6 | public class ConcreteMacOSButton implements AbstractButton 7 | { 8 | @Override 9 | public String printButtonType() 10 | { 11 | return "Mac OS Button"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/abstractFactory/products/menu/AbstractMenu.java: -------------------------------------------------------------------------------- 1 | package abstractFactory.products.menu; 2 | 3 | /** 4 | * Created by olsh on 12/17/2015. 5 | */ 6 | public interface AbstractMenu 7 | { 8 | String printMenuType(); 9 | } 10 | -------------------------------------------------------------------------------- /src/abstractFactory/products/menu/ConcreteMSMenu.java: -------------------------------------------------------------------------------- 1 | package abstractFactory.products.menu; 2 | 3 | /** 4 | * Created by olsh on 12/17/2015. 5 | */ 6 | public class ConcreteMSMenu implements AbstractMenu 7 | { 8 | @Override 9 | public String printMenuType() 10 | { 11 | return "MS Menu"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/abstractFactory/products/menu/ConcreteMacOSMenu.java: -------------------------------------------------------------------------------- 1 | package abstractFactory.products.menu; 2 | 3 | /** 4 | * Created by olsh on 12/17/2015. 5 | */ 6 | public class ConcreteMacOSMenu implements AbstractMenu 7 | { 8 | @Override 9 | public String printMenuType() 10 | { 11 | return "Mac OS Menu"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/abstractFactory/products/window/AbstractWindow.java: -------------------------------------------------------------------------------- 1 | package abstractFactory.products.window; 2 | 3 | /** 4 | * Created by olsh on 12/17/2015. 5 | */ 6 | public interface AbstractWindow 7 | { 8 | public String printWindowType(); 9 | } 10 | -------------------------------------------------------------------------------- /src/abstractFactory/products/window/ConcreteMSWindow.java: -------------------------------------------------------------------------------- 1 | package abstractFactory.products.window; 2 | 3 | /** 4 | * Created by olsh on 12/17/2015. 5 | */ 6 | public class ConcreteMSWindow implements AbstractWindow 7 | { 8 | @Override 9 | public String printWindowType() 10 | { 11 | return "MS Window"; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/abstractFactory/products/window/ConcreteMacOSWindow.java: -------------------------------------------------------------------------------- 1 | package abstractFactory.products.window; 2 | 3 | /** 4 | * Created by olsh on 12/17/2015. 5 | */ 6 | public class ConcreteMacOSWindow implements AbstractWindow 7 | { 8 | @Override 9 | public String printWindowType() 10 | { 11 | return "Mac OS Window"; 12 | } 13 | 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/adapter/AudioPlayer.java: -------------------------------------------------------------------------------- 1 | package adapter; 2 | 3 | import adapter.adaptee.MediaPlayer; 4 | 5 | /** 6 | * Created by pc on 10.03.2016. 7 | */ 8 | public class AudioPlayer implements MediaPlayer { 9 | MediaAdapter mediaAdapter; 10 | 11 | @Override 12 | public void play(String audioType, String fileName) { 13 | if (audioType.equalsIgnoreCase("mp3")){ 14 | System.out.println("Playing mp3 file "+fileName); 15 | } 16 | else if (audioType.equalsIgnoreCase("vlc")||audioType.equalsIgnoreCase("mp4")){ 17 | mediaAdapter = new MediaAdapter(audioType); 18 | mediaAdapter.play(audioType, fileName); 19 | } 20 | else { 21 | System.out.println("Invalid media "+audioType+" format not supported"); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/adapter/Main.java: -------------------------------------------------------------------------------- 1 | package adapter; 2 | 3 | /** 4 | * Created by pc on 10.03.2016. 5 | */ 6 | public class Main { 7 | public static void main(String[] args) { 8 | AudioPlayer audioPlayer = new AudioPlayer(); 9 | audioPlayer.play("mp3", "fileName.mp3"); 10 | audioPlayer.play("mp4", "fileName.mp4"); 11 | audioPlayer.play("vlc", "fileName.vlc"); 12 | audioPlayer.play("avi", "fileName.avi"); 13 | } 14 | } 15 | 16 | -------------------------------------------------------------------------------- /src/adapter/MediaAdapter.java: -------------------------------------------------------------------------------- 1 | package adapter; 2 | 3 | import adapter.adaptee.AdvancedMediaPlayer; 4 | import adapter.adaptee.MediaPlayer; 5 | import adapter.adaptee.Mp4Player; 6 | import adapter.adaptee.VlcPlayer; 7 | 8 | /** 9 | * Created by pc on 10.03.2016. 10 | */ 11 | public class MediaAdapter implements MediaPlayer { 12 | AdvancedMediaPlayer advancedMediaPlayer; 13 | 14 | public MediaAdapter(String audioType) { 15 | if (audioType.equalsIgnoreCase("vlc")){ 16 | advancedMediaPlayer = new VlcPlayer(); 17 | } 18 | else if (audioType.equalsIgnoreCase("mp4")){ 19 | advancedMediaPlayer = new Mp4Player(); 20 | } 21 | } 22 | 23 | @Override 24 | public void play(String audioType, String fileName) { 25 | if (audioType.equalsIgnoreCase("vlc")){ 26 | advancedMediaPlayer.playVlc(fileName); 27 | } 28 | else if (audioType.equalsIgnoreCase("mp4")){ 29 | advancedMediaPlayer.playMp4(fileName); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/adapter/adaptee/AdvancedMediaPlayer.java: -------------------------------------------------------------------------------- 1 | package adapter.adaptee; 2 | 3 | /** 4 | * Created by pc on 10.03.2016. 5 | */ 6 | public interface AdvancedMediaPlayer { 7 | void playVlc(String fileName); 8 | void playMp4(String fileName); 9 | } 10 | -------------------------------------------------------------------------------- /src/adapter/adaptee/MediaPlayer.java: -------------------------------------------------------------------------------- 1 | package adapter.adaptee; 2 | 3 | /** 4 | * Created by pc on 10.03.2016. 5 | */ 6 | public interface MediaPlayer { 7 | public void play(String audioType, String fileName); 8 | } 9 | -------------------------------------------------------------------------------- /src/adapter/adaptee/Mp4Player.java: -------------------------------------------------------------------------------- 1 | package adapter.adaptee; 2 | 3 | import adapter.adaptee.AdvancedMediaPlayer; 4 | 5 | /** 6 | * Created by pc on 10.03.2016. 7 | */ 8 | public class Mp4Player implements AdvancedMediaPlayer { 9 | @Override 10 | public void playVlc(String fileName) { 11 | } 12 | 13 | @Override 14 | public void playMp4(String fileName) { 15 | System.out.println("Playing mp4 file " + fileName); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/adapter/adaptee/VlcPlayer.java: -------------------------------------------------------------------------------- 1 | package adapter.adaptee; 2 | 3 | import adapter.adaptee.AdvancedMediaPlayer; 4 | 5 | /** 6 | * Created by pc on 10.03.2016. 7 | */ 8 | public class VlcPlayer implements AdvancedMediaPlayer { 9 | @Override 10 | public void playVlc(String fileName) { 11 | System.out.println("Playing vlc file " + fileName); 12 | } 13 | 14 | @Override 15 | public void playMp4(String fileName) { 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/bridge/Main.java: -------------------------------------------------------------------------------- 1 | package bridge; 2 | 3 | import bridge.abstraction.Circle; 4 | import bridge.abstraction.Shape; 5 | import bridge.implementor.DrawRedCircleAPI; 6 | import bridge.implementor.GreenCircle; 7 | 8 | /** 9 | * Created by pc on 09.01.2016. 10 | */ 11 | public class Main { 12 | public static void main(String[] args){ 13 | Shape redCircle = new Circle(new DrawRedCircleAPI(),100,100,10); 14 | Shape greenCircle = new Circle(new GreenCircle(),100,100,10); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/bridge/abstraction/Circle.java: -------------------------------------------------------------------------------- 1 | package bridge.abstraction; 2 | 3 | import bridge.implementor.DrawAPI; 4 | 5 | /** 6 | * Created by pc on 09.01.2016. 7 | */ 8 | public class Circle extends Shape { 9 | private int x,y,radius; 10 | 11 | public Circle(DrawAPI drawAPI, int x, int y, int radius) { 12 | super(drawAPI); 13 | this.x = x; 14 | this.y = y; 15 | this.radius = radius; 16 | } 17 | 18 | @Override 19 | public void draw() { 20 | drawAPI.drawCircle(radius,x,y); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/bridge/abstraction/Shape.java: -------------------------------------------------------------------------------- 1 | package bridge.abstraction; 2 | 3 | import bridge.implementor.DrawAPI; 4 | 5 | /** 6 | * Created by pc on 09.01.2016. 7 | */ 8 | public abstract class Shape { 9 | protected DrawAPI drawAPI; 10 | 11 | public Shape(DrawAPI drawAPI) { 12 | this.drawAPI = drawAPI; 13 | } 14 | 15 | public abstract void draw(); 16 | } 17 | -------------------------------------------------------------------------------- /src/bridge/implementor/DrawAPI.java: -------------------------------------------------------------------------------- 1 | package bridge.implementor; 2 | 3 | /** 4 | * Created by pc on 09.01.2016. 5 | */ 6 | public interface DrawAPI { 7 | public void drawCircle(int radius, int x, int y); 8 | } 9 | -------------------------------------------------------------------------------- /src/bridge/implementor/DrawRedCircleAPI.java: -------------------------------------------------------------------------------- 1 | package bridge.implementor; 2 | 3 | /** 4 | * Created by pc on 09.01.2016. 5 | */ 6 | public class DrawRedCircleAPI implements DrawAPI { 7 | @Override 8 | public void drawCircle(int radius, int x, int y) { 9 | System.out.print("Drawing RED circle with radius="+radius+",\nx="+x+"\ny="+y); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/bridge/implementor/GreenCircle.java: -------------------------------------------------------------------------------- 1 | package bridge.implementor; 2 | 3 | /** 4 | * Created by pc on 09.01.2016. 5 | */ 6 | public class GreenCircle implements DrawAPI { 7 | 8 | @Override 9 | public void drawCircle(int radius, int x, int y) { 10 | System.out.print("Drawing GREEN circle with radius="+radius+",\nx="+x+"\ny="+y); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/builder/AnimalBuilder.java: -------------------------------------------------------------------------------- 1 | package builder; 2 | 3 | import builder.product.*; 4 | 5 | /** 6 | * Created by pc on 17.01.2016. 7 | */ 8 | public class AnimalBuilder { 9 | private Animal animal; 10 | private Tail tail; 11 | private Foot foot; 12 | private Head head; 13 | private Habitat habitat; 14 | 15 | public AnimalBuilder() { 16 | this.animal = new Animal(); 17 | } 18 | 19 | public AnimalBuilder tail(Tail tail){ 20 | this.tail = tail; 21 | animal.addCharacteristic(tail); 22 | return this; 23 | } 24 | 25 | public AnimalBuilder foot(Foot foot){ 26 | this.foot=foot; 27 | animal.addCharacteristic(foot); 28 | return this; 29 | } 30 | 31 | public AnimalBuilder head(Head head){ 32 | this.head=head; 33 | animal.addCharacteristic(head); 34 | return this; 35 | } 36 | 37 | public AnimalBuilder habitat(Habitat habitat){ 38 | this.habitat=habitat; 39 | animal.setHabitat(habitat); 40 | return this; 41 | } 42 | 43 | public Animal build(){ 44 | return animal; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/builder/Main.java: -------------------------------------------------------------------------------- 1 | package builder; 2 | 3 | import builder.product.*; 4 | 5 | /** 6 | * Created by pc on 16.01.2016. 7 | */ 8 | public class Main { 9 | public static void main(String ... args){ 10 | Animal penguin = new AnimalBuilder() 11 | // .foot(new Paddle()) 12 | .habitat(new Water()) 13 | .head(new DefaultHead()) 14 | .tail(new DefaultTail()) 15 | .build(); 16 | Animal hen = new AnimalBuilder() 17 | .foot(new Paw()) 18 | .head(new BeakedHead()) 19 | .habitat(new Land()) 20 | .build(); 21 | System.out.println("Penguin: " + penguin); 22 | System.out.println("Hen:" + hen); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/builder/product/Animal.java: -------------------------------------------------------------------------------- 1 | package builder.product; 2 | 3 | import java.util.ArrayList; 4 | 5 | /** 6 | * Created by pc on 18.01.2016. 7 | */ 8 | public class Animal { 9 | private ArrayListcharacteristics; 10 | private Habitat habitat; 11 | 12 | public Animal() { 13 | characteristics = new ArrayList<>(); 14 | } 15 | 16 | public Animal(ArrayList characteristics) { 17 | this.characteristics = characteristics; 18 | } 19 | 20 | public void addCharacteristic(Characteristic characteristic){ 21 | characteristics.add(characteristic); 22 | } 23 | public int getWeight(){ 24 | int weight=0; 25 | for (Characteristic characteristic:characteristics){ 26 | weight+=characteristic.getWeight(); 27 | } 28 | return weight; 29 | } 30 | 31 | 32 | public void setHabitat(Habitat habitat) { 33 | this.habitat = habitat; 34 | } 35 | 36 | public Habitat getHabitat() { 37 | return habitat; 38 | } 39 | 40 | @Override 41 | public String toString() { 42 | StringBuilder builder=new StringBuilder(); 43 | builder.append("\n\nAnimal:\n"); 44 | for (Characteristic characteristic:characteristics){ 45 | builder.append(characteristic.getName()) 46 | .append("\n"); 47 | } 48 | if (habitat!=null){builder.append("Lives in: ").append(this.habitat.getName());} 49 | builder.append("\nweight: ") 50 | .append(this.getWeight()); 51 | return builder.toString(); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/builder/product/BeakedHead.java: -------------------------------------------------------------------------------- 1 | package builder.product; 2 | 3 | /** 4 | * Created by pc on 19.01.2016. 5 | */ 6 | public class BeakedHead extends Head { 7 | @Override 8 | public int getWeight() { 9 | return 4; 10 | } 11 | 12 | @Override 13 | public String getName() { 14 | return "Beaked head"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/builder/product/Characteristic.java: -------------------------------------------------------------------------------- 1 | package builder.product; 2 | 3 | /** 4 | * Created by pc on 19.01.2016. 5 | */ 6 | public class Characteristic { 7 | private int weight; 8 | private String name; 9 | public int getWeight(){return weight;} 10 | 11 | public String getName() { 12 | return name; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/builder/product/DefaultHead.java: -------------------------------------------------------------------------------- 1 | package builder.product; 2 | 3 | /** 4 | * Created by pc on 19.01.2016. 5 | */ 6 | public class DefaultHead extends Head { 7 | @Override 8 | public int getWeight() { 9 | return 2; 10 | } 11 | 12 | @Override 13 | public String getName() { 14 | return "Simply pretty head"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/builder/product/DefaultTail.java: -------------------------------------------------------------------------------- 1 | package builder.product; 2 | 3 | /** 4 | * Created by pc on 19.01.2016. 5 | */ 6 | public class DefaultTail extends Tail { 7 | @Override 8 | public int getWeight() { 9 | return 5; 10 | } 11 | 12 | @Override 13 | public String getName() { 14 | return "Little pretty tail"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/builder/product/Foot.java: -------------------------------------------------------------------------------- 1 | package builder.product; 2 | 3 | /** 4 | * Created by pc on 19.01.2016. 5 | */ 6 | public class Foot extends Characteristic { 7 | } 8 | -------------------------------------------------------------------------------- /src/builder/product/Habitat.java: -------------------------------------------------------------------------------- 1 | package builder.product; 2 | 3 | /** 4 | * Created by pc on 19.01.2016. 5 | */ 6 | public abstract class Habitat { 7 | public abstract String getName(); 8 | } 9 | -------------------------------------------------------------------------------- /src/builder/product/HairTail.java: -------------------------------------------------------------------------------- 1 | package builder.product; 2 | 3 | /** 4 | * Created by pc on 19.01.2016. 5 | */ 6 | public class HairTail extends Tail { 7 | @Override 8 | public int getWeight() { 9 | return 3; 10 | } 11 | 12 | @Override 13 | public String getName() { 14 | return "Haired tail"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/builder/product/Head.java: -------------------------------------------------------------------------------- 1 | package builder.product; 2 | 3 | /** 4 | * Created by pc on 19.01.2016. 5 | */ 6 | public class Head extends Characteristic { 7 | } 8 | -------------------------------------------------------------------------------- /src/builder/product/Land.java: -------------------------------------------------------------------------------- 1 | package builder.product; 2 | 3 | /** 4 | * Created by pc on 19.01.2016. 5 | */ 6 | public class Land extends Habitat { 7 | @Override 8 | public String getName() { 9 | return "Land"; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/builder/product/Paddle.java: -------------------------------------------------------------------------------- 1 | package builder.product; 2 | 3 | /** 4 | * Created by pc on 19.01.2016. 5 | */ 6 | public class Paddle extends Foot { 7 | @Override 8 | public int getWeight() { 9 | return 5; 10 | } 11 | 12 | @Override 13 | public String getName() { 14 | return "Little paddles"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/builder/product/Paw.java: -------------------------------------------------------------------------------- 1 | package builder.product; 2 | 3 | /** 4 | * Created by pc on 19.01.2016. 5 | */ 6 | public class Paw extends Foot { 7 | @Override 8 | public int getWeight() { 9 | return 10; 10 | } 11 | 12 | @Override 13 | public String getName() { 14 | return "Fluffy paws"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/builder/product/Perriered.java: -------------------------------------------------------------------------------- 1 | package builder.product; 2 | 3 | /** 4 | * Created by pc on 19.01.2016. 5 | */ 6 | public class Perriered extends Tail { 7 | @Override 8 | public int getWeight() { 9 | return 2; 10 | } 11 | 12 | @Override 13 | public String getName() { 14 | return "Perriered tail"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/builder/product/Tail.java: -------------------------------------------------------------------------------- 1 | package builder.product; 2 | 3 | /** 4 | * Created by pc on 19.01.2016. 5 | */ 6 | public class Tail extends Characteristic { 7 | } 8 | -------------------------------------------------------------------------------- /src/builder/product/Water.java: -------------------------------------------------------------------------------- 1 | package builder.product; 2 | 3 | /** 4 | * Created by pc on 19.01.2016. 5 | */ 6 | public class Water extends Habitat { 7 | @Override 8 | public String getName() { 9 | return "Water"; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/chainOfResponsibility/AbstractLogger.java: -------------------------------------------------------------------------------- 1 | package chainOfResponsibility; 2 | 3 | /** 4 | * Created by pc on 14.03.2016. 5 | */ 6 | public abstract class AbstractLogger { 7 | public static int INFO = 1; 8 | public static int DEBUG = 2; 9 | public static int ERROR = 3; 10 | 11 | protected int level; 12 | 13 | protected AbstractLogger nextLogger; 14 | 15 | public void setNextLogger(AbstractLogger nextLogger){ 16 | this.nextLogger = nextLogger; 17 | } 18 | 19 | public void logMessage(int level, String message){ 20 | if (this.level<=level){ 21 | logMessage(message); 22 | } 23 | if (nextLogger!=null){ 24 | nextLogger.logMessage(level,message); 25 | } 26 | } 27 | 28 | abstract protected void logMessage(String message); 29 | } 30 | -------------------------------------------------------------------------------- /src/chainOfResponsibility/ConsoleLogger.java: -------------------------------------------------------------------------------- 1 | package chainOfResponsibility; 2 | 3 | /** 4 | * Created by pc on 14.03.2016. 5 | */ 6 | public class ConsoleLogger extends AbstractLogger{ 7 | @Override 8 | protected void logMessage(String message) { 9 | System.out.println("INFO: " + message); 10 | } 11 | 12 | public ConsoleLogger(int level) { 13 | this.level = level; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/chainOfResponsibility/ErrorLogger.java: -------------------------------------------------------------------------------- 1 | package chainOfResponsibility; 2 | 3 | /** 4 | * Created by pc on 14.03.2016. 5 | */ 6 | public class ErrorLogger extends AbstractLogger{ 7 | @Override 8 | protected void logMessage(String message) { 9 | System.out.println("ERROR: " + message); 10 | } 11 | 12 | public ErrorLogger(int level) { 13 | this.level = level; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/chainOfResponsibility/FileLogger.java: -------------------------------------------------------------------------------- 1 | package chainOfResponsibility; 2 | 3 | /** 4 | * Created by pc on 14.03.2016. 5 | */ 6 | public class FileLogger extends AbstractLogger{ 7 | @Override 8 | protected void logMessage(String message) { 9 | System.out.println("DEBUG: " + message); 10 | } 11 | 12 | public FileLogger(int level) { 13 | this.level = level; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/chainOfResponsibility/Main.java: -------------------------------------------------------------------------------- 1 | package chainOfResponsibility; 2 | 3 | /** 4 | * Created by pc on 14.03.2016. 5 | */ 6 | public class Main { 7 | static AbstractLogger mainLogger = new ErrorLogger(AbstractLogger.ERROR); 8 | static AbstractLogger debugLogger = new FileLogger(AbstractLogger.DEBUG); 9 | static AbstractLogger infoLogger = new ConsoleLogger(AbstractLogger.INFO); 10 | 11 | static { 12 | mainLogger.setNextLogger(debugLogger); 13 | debugLogger.setNextLogger(infoLogger); 14 | } 15 | 16 | public static void main(String[] args) { 17 | mainLogger.logMessage(AbstractLogger.INFO, "message for info"); 18 | mainLogger.logMessage(AbstractLogger.DEBUG, "message for debug"); 19 | mainLogger.logMessage(AbstractLogger.ERROR, "message for error"); 20 | 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/command/Invoker.java: -------------------------------------------------------------------------------- 1 | package command; 2 | 3 | 4 | import command.command.AbstractCommand; 5 | 6 | import java.util.*; 7 | 8 | public class Invoker 9 | { 10 | private List commands = new ArrayList(); 11 | 12 | public void putCommand(AbstractCommand command){ 13 | commands.add(command); 14 | } 15 | 16 | public void invokeAll(){ 17 | for (AbstractCommand command:commands){ 18 | command.execute(); 19 | } 20 | commands.clear(); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/command/Main.java: -------------------------------------------------------------------------------- 1 | package command; 2 | 3 | import command.command.*; 4 | import command.request.*; 5 | 6 | public class Main { 7 | 8 | public static void main(String[] args) throws InstantiationException, IllegalAccessException 9 | { 10 | Invoker commandInvoker = new Invoker(); 11 | commandInvoker.putCommand(new TurnOnCommand(TV.getInstance())); 12 | commandInvoker.putCommand(new VolumePlusCommand(TV.getInstance(), 5)); 13 | commandInvoker.putCommand(new VolumeMinusCommand(TV.getInstance(), 3)); 14 | commandInvoker.putCommand(new TurnOffCommand(TV.getInstance())); 15 | 16 | commandInvoker.invokeAll(); 17 | 18 | 19 | commandInvoker.putCommand(new TurnOnCommand(Radio.getInstance())); 20 | commandInvoker.putCommand(new VolumePlusCommand(Radio.getInstance(), 5)); 21 | commandInvoker.putCommand(new VolumeMinusCommand(Radio.getInstance(), 3)); 22 | commandInvoker.putCommand(new TurnOffCommand(Radio.getInstance())); 23 | 24 | commandInvoker.invokeAll(); 25 | 26 | 27 | commandInvoker.putCommand(new TurnOnCommand(Player.getInstance())); 28 | commandInvoker.putCommand(new VolumePlusCommand(Player.getInstance(), 5)); 29 | commandInvoker.putCommand(new VolumeMinusCommand(Player.getInstance(), 3)); 30 | commandInvoker.putCommand(new TurnOffCommand(Player.getInstance())); 31 | 32 | commandInvoker.invokeAll(); 33 | 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/command/command/AbstractCommand.java: -------------------------------------------------------------------------------- 1 | package command.command; 2 | 3 | public abstract class AbstractCommand 4 | { 5 | public abstract void execute(); 6 | } 7 | -------------------------------------------------------------------------------- /src/command/command/TurnOffCommand.java: -------------------------------------------------------------------------------- 1 | package command.command; 2 | 3 | 4 | import command.request.ElectronicDevice; 5 | 6 | public class TurnOffCommand extends AbstractCommand 7 | { 8 | ElectronicDevice device; 9 | 10 | public TurnOffCommand(ElectronicDevice device) 11 | { 12 | this.device = device; 13 | } 14 | 15 | @Override 16 | public void execute() 17 | { 18 | if (device.getState()==true)device.off(); 19 | else System.out.print(device.getType() + " is already off!"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/command/command/TurnOnCommand.java: -------------------------------------------------------------------------------- 1 | package command.command; 2 | 3 | 4 | import command.request.ElectronicDevice; 5 | 6 | public class TurnOnCommand extends AbstractCommand 7 | { 8 | ElectronicDevice device; 9 | 10 | public TurnOnCommand(ElectronicDevice device) 11 | { 12 | this.device = device; 13 | } 14 | 15 | @Override 16 | public void execute() 17 | { 18 | if (device.getState()==false)device.on(); 19 | else System.out.print(device.getType() + " is already on!"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/command/command/VolumeMinusCommand.java: -------------------------------------------------------------------------------- 1 | package command.command; 2 | 3 | 4 | import command.request.ElectronicDevice; 5 | 6 | public class VolumeMinusCommand extends AbstractCommand 7 | { 8 | ElectronicDevice device; 9 | int amount; 10 | 11 | public VolumeMinusCommand(ElectronicDevice device, int amount) 12 | { 13 | this.device = device; 14 | this.amount = amount; 15 | } 16 | 17 | @Override 18 | public void execute() 19 | { 20 | if (device.getVolume()>=amount) 21 | for (int i=0;i 2 | 3 | Composite Pattern 4 | 5 | 6 |

Example of Composite Structural Pattern

7 |

By OL SH

8 | 9 | 10 | 11 | Process finished with exit code 0 -------------------------------------------------------------------------------- /src/composite/pattern/Component.java: -------------------------------------------------------------------------------- 1 | package composite.pattern; 2 | 3 | /** 4 | * Created by olsh0415 on 10/9/2015. 5 | */ 6 | public interface Component 7 | { 8 | void Print (int depth); 9 | } 10 | -------------------------------------------------------------------------------- /src/composite/pattern/Composite.java: -------------------------------------------------------------------------------- 1 | package composite.pattern; 2 | 3 | 4 | import java.util.*; 5 | 6 | /** 7 | * Created by olsh0415 on 10/9/2015. 8 | */ 9 | public class Composite implements Component 10 | { 11 | LinkedList components = new LinkedList(); 12 | 13 | private final String name; 14 | 15 | public Composite(String name) 16 | { 17 | this.name = name; 18 | } 19 | 20 | public void addComponent(Component c){ 21 | components.add(c); 22 | } 23 | 24 | public void removeComponent(Component c){ 25 | components.remove(c); 26 | } 27 | 28 | @Override 29 | public void Print(int depth) 30 | { 31 | for (int i=0; i\n"); 35 | for (Component c:components){ 36 | c.Print(depth+1); 37 | } 38 | for (int i=0; i\n"); 42 | 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/composite/pattern/Leaf.java: -------------------------------------------------------------------------------- 1 | package composite.pattern; 2 | 3 | /** 4 | * Created by olsh0415 on 10/9/2015. 5 | */ 6 | public class Leaf implements Component 7 | { 8 | private final String name; 9 | private String text; 10 | 11 | public Leaf(String name, String text) 12 | { 13 | this.name = name; 14 | this.text = text; 15 | } 16 | 17 | public Leaf(String name) 18 | { 19 | this.name = name; 20 | } 21 | 22 | @Override 23 | public void Print(int depth) 24 | { 25 | for (int i=0; i"+text+"\n"); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/decorator/basic/Main.java: -------------------------------------------------------------------------------- 1 | package decorator.basic; 2 | 3 | import decorator.concreteDecorator.*; 4 | 5 | /** 6 | * Created by olsh on 12/8/2015. 7 | */ 8 | public class Main 9 | { 10 | public static void main(String [] args){ 11 | Pizza basicPizza = new TomatoSauce(new Mozzarella(new SimplePizza())); 12 | System.out.println("Basic pizza ingredients: " + basicPizza.getDescription()+"\nCost:"+ basicPizza.getCost()); 13 | 14 | Pizza meatPizza = new Beacon(new Chicken(basicPizza)); 15 | System.out.println("Meat pizza ingredients: " + meatPizza.getDescription() + "\nCost:" + meatPizza.getCost()); 16 | 17 | Pizza sourSweetPizza = new Pineapple(new Chicken(basicPizza)); 18 | System.out.println("Sour-sweet pizza ingredients: " + sourSweetPizza.getDescription()+"\nCost:"+ sourSweetPizza.getCost()); 19 | 20 | Pizza fruttiDelMare = new Mussel(basicPizza); 21 | System.out.println("Frutti del mare pizza ingredients: " + fruttiDelMare.getDescription()+"\nCost:"+ fruttiDelMare.getCost()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/decorator/basic/Pizza.java: -------------------------------------------------------------------------------- 1 | package decorator.basic; 2 | 3 | /** 4 | * Created by olsh on 12/8/2015. 5 | */ 6 | public interface Pizza 7 | { 8 | public String getDescription(); 9 | public double getCost(); 10 | } 11 | -------------------------------------------------------------------------------- /src/decorator/basic/SimplePizza.java: -------------------------------------------------------------------------------- 1 | package decorator.basic; 2 | 3 | 4 | /** 5 | * Created by olsh on 12/8/2015. 6 | */ 7 | public class SimplePizza implements Pizza 8 | { 9 | 10 | @Override 11 | public String getDescription() 12 | { 13 | return "Dough"; 14 | } 15 | 16 | @Override 17 | public double getCost() 18 | { 19 | return 10.0; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/decorator/basic/ToppingDecorator.java: -------------------------------------------------------------------------------- 1 | package decorator.basic; 2 | 3 | /** 4 | * Created by olsh on 12/8/2015. 5 | */ 6 | public abstract class ToppingDecorator implements Pizza 7 | { 8 | protected Pizza tempPizza; 9 | 10 | public ToppingDecorator(Pizza newPizza) 11 | { 12 | tempPizza=newPizza; 13 | } 14 | 15 | @Override 16 | public String getDescription() 17 | { 18 | return tempPizza.getDescription(); 19 | } 20 | 21 | @Override 22 | public double getCost() 23 | { 24 | return tempPizza.getCost(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/decorator/concreteDecorator/Beacon.java: -------------------------------------------------------------------------------- 1 | package decorator.concreteDecorator; 2 | 3 | 4 | import decorator.basic.Pizza; 5 | import decorator.basic.ToppingDecorator; 6 | 7 | /** 8 | * Created by olsh on 12/8/2015. 9 | */ 10 | public class Beacon extends ToppingDecorator 11 | { 12 | public Beacon(Pizza newPizza) 13 | { 14 | super(newPizza); 15 | System.out.println("Adding Beacon"); 16 | } 17 | 18 | @Override 19 | public String getDescription() 20 | { 21 | return tempPizza.getDescription()+", Beacon"; 22 | } 23 | 24 | @Override 25 | public double getCost() 26 | { 27 | return tempPizza.getCost()+3.0; 28 | } 29 | 30 | } 31 | 32 | -------------------------------------------------------------------------------- /src/decorator/concreteDecorator/Chicken.java: -------------------------------------------------------------------------------- 1 | package decorator.concreteDecorator; 2 | 3 | import decorator.basic.*; 4 | 5 | /** 6 | * Created by olsh on 12/8/2015. 7 | */ 8 | public class Chicken extends ToppingDecorator 9 | { 10 | public Chicken(Pizza newPizza) 11 | { 12 | super(newPizza); 13 | System.out.println("Adding Chicken"); 14 | } 15 | 16 | @Override 17 | public String getDescription() 18 | { 19 | return tempPizza.getDescription()+", Chicken"; 20 | } 21 | 22 | @Override 23 | public double getCost() 24 | { 25 | return tempPizza.getCost()+4.0; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/decorator/concreteDecorator/Meat.java: -------------------------------------------------------------------------------- 1 | package decorator.concreteDecorator; 2 | 3 | import decorator.basic.Pizza; 4 | import decorator.basic.ToppingDecorator; 5 | 6 | /** 7 | * Created by olsh on 12/8/2015. 8 | */ 9 | public class Meat extends ToppingDecorator 10 | { 11 | public Meat(Pizza newPizza) 12 | { 13 | super(newPizza); 14 | System.out.println("Adding Meat"); 15 | } 16 | 17 | @Override 18 | public String getDescription() 19 | { 20 | return tempPizza.getDescription()+", Meat"; 21 | } 22 | 23 | @Override 24 | public double getCost() 25 | { 26 | return tempPizza.getCost()+3.0; 27 | } 28 | 29 | } 30 | 31 | -------------------------------------------------------------------------------- /src/decorator/concreteDecorator/Mozzarella.java: -------------------------------------------------------------------------------- 1 | package decorator.concreteDecorator; 2 | 3 | import decorator.basic.*; 4 | 5 | /** 6 | * Created by olsh on 12/8/2015. 7 | */ 8 | public class Mozzarella extends ToppingDecorator 9 | { 10 | public Mozzarella(Pizza newPizza) 11 | { 12 | super(newPizza); 13 | System.out.println("Adding mozzarella"); 14 | } 15 | 16 | @Override 17 | public String getDescription() 18 | { 19 | return tempPizza.getDescription()+", Mozzarella"; 20 | } 21 | 22 | @Override 23 | public double getCost() 24 | { 25 | return tempPizza.getCost()+2.0; 26 | } 27 | 28 | } 29 | 30 | -------------------------------------------------------------------------------- /src/decorator/concreteDecorator/Mussel.java: -------------------------------------------------------------------------------- 1 | package decorator.concreteDecorator; 2 | 3 | import decorator.basic.*; 4 | 5 | /** 6 | * Created by olsh on 12/8/2015. 7 | */ 8 | public class Mussel extends ToppingDecorator 9 | { 10 | public Mussel(Pizza newPizza) 11 | { 12 | super(newPizza); 13 | System.out.println("Adding Mussels"); 14 | } 15 | 16 | @Override 17 | public String getDescription() 18 | { 19 | return tempPizza.getDescription()+", Mussels"; 20 | } 21 | 22 | @Override 23 | public double getCost() 24 | { 25 | return tempPizza.getCost()+7.0; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/decorator/concreteDecorator/Pineapple.java: -------------------------------------------------------------------------------- 1 | package decorator.concreteDecorator; 2 | 3 | import decorator.basic.*; 4 | 5 | /** 6 | * Created by olsh on 12/8/2015. 7 | */ 8 | public class Pineapple extends ToppingDecorator 9 | { 10 | public Pineapple(Pizza newPizza) 11 | { 12 | super(newPizza); 13 | System.out.println("Adding Pineapple"); 14 | } 15 | 16 | @Override 17 | public String getDescription() 18 | { 19 | return tempPizza.getDescription() + ", Pineapple"; 20 | } 21 | 22 | @Override 23 | public double getCost() 24 | { 25 | return tempPizza.getCost() + 6.0; 26 | } 27 | } 28 | 29 | -------------------------------------------------------------------------------- /src/decorator/concreteDecorator/TomatoSauce.java: -------------------------------------------------------------------------------- 1 | package decorator.concreteDecorator; 2 | 3 | import decorator.basic.*; 4 | 5 | /** 6 | * Created by olsh on 12/8/2015. 7 | */ 8 | public class TomatoSauce extends ToppingDecorator 9 | { 10 | public TomatoSauce(Pizza newPizza) 11 | { 12 | super(newPizza); 13 | System.out.println("Adding Tomato Sauce"); 14 | } 15 | 16 | @Override 17 | public String getDescription() 18 | { 19 | return tempPizza.getDescription()+", Tomato Sauce"; 20 | } 21 | 22 | @Override 23 | public double getCost() 24 | { 25 | return tempPizza.getCost()+1.0; 26 | } 27 | 28 | } 29 | 30 | -------------------------------------------------------------------------------- /src/facade/Main.java: -------------------------------------------------------------------------------- 1 | package facade; 2 | 3 | /** 4 | * Created by pc on 14.02.2016. 5 | */ 6 | public class Main { 7 | public static void main(String ... args){ 8 | ShapeFacade shapeFacade = new ShapeFacade(); 9 | shapeFacade.createCircle(); 10 | shapeFacade.createLine(); 11 | shapeFacade.createRectangle(); 12 | shapeFacade.createTriangle(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/facade/ShapeFacade.java: -------------------------------------------------------------------------------- 1 | package facade; 2 | 3 | import facade.subsystem.Circle; 4 | import facade.subsystem.Line; 5 | import facade.subsystem.Rectangular; 6 | import facade.subsystem.Triangle; 7 | 8 | /** 9 | * Created by pc on 13.02.2016. 10 | */ 11 | public class ShapeFacade{ 12 | public void createLine(){ 13 | Line line = new Line(); 14 | line.draw(); 15 | } 16 | 17 | public void createTriangle(){ 18 | Triangle triangle = new Triangle(); 19 | triangle.draw(); 20 | } 21 | public void createCircle(){ 22 | Circle circle = new Circle(); 23 | circle.draw(); 24 | } 25 | public void createRectangle(){ 26 | Rectangular rectangular = new Rectangular(); 27 | rectangular.draw(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/facade/subsystem/Circle.java: -------------------------------------------------------------------------------- 1 | package facade.subsystem; 2 | 3 | /** 4 | * Created by pc on 14.02.2016. 5 | */ 6 | public class Circle extends Shape { 7 | @Override 8 | public void draw() { 9 | System.out.println("Circle.draw" + ++id); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/facade/subsystem/Line.java: -------------------------------------------------------------------------------- 1 | package facade.subsystem; 2 | 3 | /** 4 | * Created by pc on 13.02.2016. 5 | */ 6 | public class Line extends Shape { 7 | @Override 8 | public void draw() { 9 | System.out.println("Line.draw" + ++id); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/facade/subsystem/Rectangular.java: -------------------------------------------------------------------------------- 1 | package facade.subsystem; 2 | 3 | /** 4 | * Created by pc on 14.02.2016. 5 | */ 6 | public class Rectangular extends Shape { 7 | @Override 8 | public void draw() { 9 | System.out.println("Rectangular.draw"+ ++id); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/facade/subsystem/Shape.java: -------------------------------------------------------------------------------- 1 | package facade.subsystem; 2 | 3 | /** 4 | * Created by pc on 13.02.2016. 5 | */ 6 | public abstract class Shape { 7 | static int id=0; 8 | 9 | abstract void draw(); 10 | } 11 | -------------------------------------------------------------------------------- /src/facade/subsystem/Triangle.java: -------------------------------------------------------------------------------- 1 | package facade.subsystem; 2 | 3 | /** 4 | * Created by pc on 14.02.2016. 5 | */ 6 | public class Triangle extends Shape { 7 | @Override 8 | public void draw() { 9 | System.out.println("Triangle.draw" + ++id); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/factory/Main.java: -------------------------------------------------------------------------------- 1 | package factory; 2 | 3 | /** 4 | * Created by pc on 20.01.2016. 5 | */ 6 | public class Main { 7 | 8 | public static void main(String ... args){ 9 | ToyFactory toyFactory=new ToyFactory(); 10 | System.out.println(toyFactory.produceTank()); 11 | System.out.println(toyFactory.produceHelicopter()); 12 | System.out.println(toyFactory.produceConstructor()); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/factory/ToyFactory.java: -------------------------------------------------------------------------------- 1 | package factory; 2 | 3 | import factory.product.Constructor; 4 | import factory.product.Helicopter; 5 | import factory.product.Tank; 6 | import factory.product.Toy; 7 | 8 | /** 9 | * Created by pc on 20.01.2016. 10 | */ 11 | public class ToyFactory { 12 | public Toy produceConstructor(){ 13 | return new Constructor(); 14 | } 15 | public Toy produceHelicopter(){ 16 | return new Helicopter(); 17 | } 18 | public Toy produceTank(){ 19 | return new Tank(); 20 | } 21 | 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/factory/product/Constructor.java: -------------------------------------------------------------------------------- 1 | package factory.product; 2 | 3 | /** 4 | * Created by pc on 20.01.2016. 5 | */ 6 | public class Constructor extends Toy { 7 | public Constructor() { 8 | name = "Constructor"; 9 | price = 10; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/factory/product/Helicopter.java: -------------------------------------------------------------------------------- 1 | package factory.product; 2 | 3 | /** 4 | * Created by pc on 20.01.2016. 5 | */ 6 | public class Helicopter extends Toy{ 7 | public Helicopter() { 8 | name = "Helicopter"; 9 | price = 15; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/factory/product/Tank.java: -------------------------------------------------------------------------------- 1 | package factory.product; 2 | 3 | /** 4 | * Created by pc on 20.01.2016. 5 | */ 6 | public class Tank extends Toy { 7 | public Tank() { 8 | name = "Tank"; 9 | price = 7; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/factory/product/Toy.java: -------------------------------------------------------------------------------- 1 | package factory.product; 2 | 3 | /** 4 | * Created by pc on 20.01.2016. 5 | */ 6 | public class Toy { 7 | public String name = ""; 8 | public int price = 0; 9 | 10 | @Override 11 | public String toString() { 12 | return name + 13 | " (price: " + price + 14 | ')'; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/filter/Main.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MountbattenPink/Design_Patterns/4a75f8974f023f482acb2ef778faf7cda91d1b27/src/filter/Main.java -------------------------------------------------------------------------------- /src/filter/Tablet.java: -------------------------------------------------------------------------------- 1 | package filter; 2 | 3 | /** 4 | * Created by pc on 04.02.2016. 5 | */ 6 | public class Tablet { 7 | boolean present3g; 8 | String processorModel; 9 | int ramGB; 10 | String videoAdepterModel; 11 | 12 | public Tablet(boolean present3g, String processorModel, int ramGB, String videoAdepterModel) { 13 | this.present3g = present3g; 14 | this.processorModel = processorModel; 15 | this.ramGB = ramGB; 16 | this.videoAdepterModel = videoAdepterModel; 17 | } 18 | 19 | public boolean isPresent3g() { 20 | return present3g; 21 | } 22 | 23 | public String getProcessorModel() { 24 | return processorModel; 25 | } 26 | 27 | public int getRamGB() { 28 | return ramGB; 29 | } 30 | 31 | public String getVideoAdepterModel() { 32 | return videoAdepterModel; 33 | } 34 | 35 | @Override 36 | public String toString() { 37 | return "\nTablet{" + 38 | "present3g=" + present3g + 39 | ", processorModel='" + processorModel + '\'' + 40 | ", ramGB=" + ramGB + 41 | ", videoAdepterModel='" + videoAdepterModel + '\'' + 42 | '}'; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/filter/filters/AbstractFilter.java: -------------------------------------------------------------------------------- 1 | package filter.filters; 2 | 3 | import filter.Tablet; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * Created by pc on 04.02.2016. 9 | */ 10 | public abstract class AbstractFilter { 11 | public abstract List meetCriteria(List tablets); 12 | } 13 | -------------------------------------------------------------------------------- /src/filter/filters/AndFilter.java: -------------------------------------------------------------------------------- 1 | package filter.filters; 2 | 3 | import filter.Tablet; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | /** 9 | * Created by pc on 04.02.2016. 10 | */ 11 | public class AndFilter extends AbstractFilter{ 12 | List filters=new ArrayList<>(); 13 | 14 | public AndFilter(List filters) { 15 | this.filters = filters; 16 | } 17 | 18 | @Override 19 | public List meetCriteria(List tablets) { 20 | for (AbstractFilter filter:filters){ 21 | tablets=filter.meetCriteria(tablets); 22 | } 23 | return tablets; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/filter/filters/Filter3G.java: -------------------------------------------------------------------------------- 1 | package filter.filters; 2 | 3 | import filter.Tablet; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | /** 9 | * Created by pc on 04.02.2016. 10 | */ 11 | public class Filter3G extends AbstractFilter { 12 | @Override 13 | public List meetCriteria(List tablets) { 14 | Listtabs=new ArrayList<>(); 15 | for (Tablet t:tablets) 16 | if (t.isPresent3g()) 17 | tabs.add(t); 18 | return tabs; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/filter/filters/OrFilter.java: -------------------------------------------------------------------------------- 1 | package filter.filters; 2 | 3 | import filter.Tablet; 4 | 5 | import java.util.ArrayList; 6 | import java.util.HashSet; 7 | import java.util.List; 8 | 9 | /** 10 | * Created by pc on 04.02.2016. 11 | */ 12 | public class OrFilter extends AbstractFilter { 13 | List filters=new ArrayList<>(); 14 | 15 | public OrFilter(List filters) { 16 | this.filters = filters; 17 | } 18 | 19 | @Override 20 | public List meetCriteria(List tablets) { 21 | HashSettabletHash=new HashSet<>(); 22 | for (AbstractFilter filter:filters){ 23 | tabletHash.addAll(filter.meetCriteria(tablets)); 24 | } 25 | return new ArrayList<>(tabletHash); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/filter/filters/ProcessorFilter.java: -------------------------------------------------------------------------------- 1 | package filter.filters; 2 | 3 | import filter.Tablet; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | /** 9 | * Created by pc on 04.02.2016. 10 | */ 11 | public class ProcessorFilter extends AbstractFilter { 12 | @Override 13 | public List meetCriteria(List tablets) { 14 | Listtabs=new ArrayList<>(); 15 | for (Tablet t:tablets) 16 | if (t.getProcessorModel().matches("(.*)intel(.*)")) 17 | tabs.add(t); 18 | return tabs; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/filter/filters/RamFilter.java: -------------------------------------------------------------------------------- 1 | package filter.filters; 2 | 3 | import filter.Tablet; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | /** 9 | * Created by pc on 04.02.2016. 10 | */ 11 | public class RamFilter extends AbstractFilter { 12 | @Override 13 | public List meetCriteria(List tablets) { 14 | Listtabs=new ArrayList<>(); 15 | for (Tablet t:tablets) 16 | if (t.getRamGB()>=4) 17 | tabs.add(t); 18 | return tabs; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/filter/filters/VideoAdapterFilter.java: -------------------------------------------------------------------------------- 1 | package filter.filters; 2 | 3 | import filter.Tablet; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | /** 9 | * Created by pc on 04.02.2016. 10 | */ 11 | public class VideoAdapterFilter extends AbstractFilter { 12 | @Override 13 | public List meetCriteria(List tablets) { 14 | Listtabs=new ArrayList<>(); 15 | for (Tablet t:tablets) 16 | if (t.getVideoAdepterModel().matches("(.*)geforce(.*)")) 17 | tabs.add(t); 18 | return tabs; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/flyweight/Circle.java: -------------------------------------------------------------------------------- 1 | package flyweight; 2 | 3 | /** 4 | * Created by pc on 21.02.2016. 5 | */ 6 | public class Circle implements Shape { 7 | 8 | private String color; 9 | private int x; 10 | private int y; 11 | private int r; 12 | 13 | public Circle(String color) { 14 | this.color = color; 15 | } 16 | 17 | public void setX(int x) { 18 | this.x = x; 19 | } 20 | 21 | public void setY(int y) { 22 | this.y = y; 23 | } 24 | 25 | public void setR(int r) { 26 | this.r = r; 27 | } 28 | 29 | @Override 30 | public void draw() { 31 | System.out.println("Circle#Draw()\nColor :" + color + "\nx :" + x + "\ny :" + y + "\nradius :" + r ); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/flyweight/Main.java: -------------------------------------------------------------------------------- 1 | package flyweight; 2 | 3 | /** 4 | * Created by pc on 21.02.2016. 5 | */ 6 | public class Main { 7 | private static final String colors[]={"red", "yellow", "blue", "white", "pink", "black"}; 8 | 9 | public static void main(String[] args) { 10 | for (int i=0; i<20;++i){ 11 | Circle circle = (Circle)ShapeFactory.getCircle(colors[(int)(Math.random()*colors.length)]); 12 | circle.setR((int)(Math.random()*100)); 13 | circle.setX((int) (Math.random() * 100)); 14 | circle.setY((int) (Math.random() * 100)); 15 | circle.draw(); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/flyweight/Shape.java: -------------------------------------------------------------------------------- 1 | package flyweight; 2 | 3 | /** 4 | * Created by pc on 21.02.2016. 5 | */ 6 | public interface Shape { 7 | void draw(); 8 | } 9 | -------------------------------------------------------------------------------- /src/flyweight/ShapeFactory.java: -------------------------------------------------------------------------------- 1 | package flyweight; 2 | 3 | import java.util.HashMap; 4 | 5 | /** 6 | * Created by pc on 21.02.2016. 7 | */ 8 | public class ShapeFactory { 9 | private static final HashMap circleMap = new HashMap<>(); 10 | public static Shape getCircle(String color){ 11 | Circle circle = (Circle)circleMap.get(color); 12 | if (circle==null){ 13 | circle = new Circle(color); 14 | circleMap.put(color, circle); 15 | System.out.println("Creating " + color + " circle"); 16 | } 17 | return circle; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/interpreter/AndExpression.java: -------------------------------------------------------------------------------- 1 | package interpreter; 2 | 3 | /** 4 | * Created by pc on 12.03.2016. 5 | */ 6 | public class AndExpression implements Expression{ 7 | private Expression expr1; 8 | private Expression expr2; 9 | 10 | public AndExpression(Expression expr1, Expression expr2) { 11 | this.expr1 = expr1; 12 | this.expr2 = expr2; 13 | } 14 | 15 | 16 | @Override 17 | public boolean interpret(String context) { 18 | return expr1.interpret(context)&&expr2.interpret(context); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/interpreter/Expression.java: -------------------------------------------------------------------------------- 1 | package interpreter; 2 | 3 | /** 4 | * Created by pc on 12.03.2016. 5 | */ 6 | public interface Expression { 7 | public boolean interpret(String context); 8 | } 9 | -------------------------------------------------------------------------------- /src/interpreter/Main.java: -------------------------------------------------------------------------------- 1 | package interpreter; 2 | 3 | /** 4 | * Created by pc on 12.03.2016. 5 | */ 6 | public class Main { 7 | public static Expression getMaleExpression(){ 8 | Expression robert = new TerminalExpression("Robert"); 9 | Expression john = new TerminalExpression("John"); 10 | return new OrExpression(robert,john); 11 | } 12 | 13 | public static Expression getMarriedWomanExpression(){ 14 | Expression julie = new TerminalExpression("Julie"); 15 | Expression married = new TerminalExpression("Married"); 16 | return new AndExpression(julie,married); 17 | } 18 | 19 | 20 | public static void main(String[] args) { 21 | Expression isMale = getMaleExpression(); 22 | Expression isMarriedWoman = getMarriedWomanExpression(); 23 | System.out.println("John is male? " + isMale.interpret("John")); 24 | System.out.println("Julie is Married woman? " + isMarriedWoman.interpret("Married Julie")); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/interpreter/OrExpression.java: -------------------------------------------------------------------------------- 1 | package interpreter; 2 | 3 | /** 4 | * Created by pc on 12.03.2016. 5 | */ 6 | public class OrExpression implements Expression{ 7 | private Expression expr1; 8 | private Expression expr2; 9 | 10 | public OrExpression(Expression expr1, Expression expr2) { 11 | this.expr1 = expr1; 12 | this.expr2 = expr2; 13 | } 14 | 15 | 16 | @Override 17 | public boolean interpret(String context) { 18 | return expr1.interpret(context)||expr2.interpret(context); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/interpreter/TerminalExpression.java: -------------------------------------------------------------------------------- 1 | package interpreter; 2 | 3 | /** 4 | * Created by pc on 12.03.2016. 5 | */ 6 | public class TerminalExpression implements Expression { 7 | private String data; 8 | 9 | public TerminalExpression(String data) { 10 | this.data = data; 11 | } 12 | 13 | @Override 14 | public boolean interpret(String context) { 15 | return (context.contains(data)); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/iterator/Main.java: -------------------------------------------------------------------------------- 1 | package iterator; 2 | 3 | import iterator.chains.*; 4 | import iterator.entity.*; 5 | import iterator.iterator.Iterator; 6 | 7 | public class Main { 8 | 9 | public static void main(String[] args) { 10 | Container mayhem = new BlackMetalBand(); 11 | mayhem.addMember(new Musician("Necrobutcher", Role.bass)); 12 | mayhem.addMember(new Musician("Hellhammer", Role.drum)); 13 | mayhem.addMember(new Musician("Attila Csihar", Role.vocal)); 14 | mayhem.addMember(new Musician("Ghul", Role.guitar)); 15 | 16 | Container tyr = new VikingMetalBand(); 17 | tyr.addMember(new Musician("Heri Joensen", Role.guitar)); 18 | tyr.addMember(new Musician("Gunnar Thomsen", Role.bass)); 19 | tyr.addMember(new Musician("Terji Skibenæs", Role.guitar)); 20 | tyr.addMember(new Musician("Kári Streymoy", Role.drum)); 21 | tyr.addMember(new Musician("Pól Arni Holm", Role.vocal)); 22 | 23 | System.out.println("Mayhem:"); 24 | Iterator mayhemIterator=mayhem.createItrator(); 25 | while (mayhemIterator.hasNext()) 26 | System.out.println(mayhemIterator.next()); 27 | 28 | System.out.println("\n\nTýr:"); 29 | Iterator tyrIterator=tyr.createItrator(); 30 | while (tyrIterator.hasNext()) 31 | System.out.println(tyrIterator.next()); 32 | 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/iterator/chains/BlackMetalBand.java: -------------------------------------------------------------------------------- 1 | package iterator.chains; 2 | 3 | import iterator.entity.Musician; 4 | import iterator.iterator.*; 5 | 6 | import java.util.ArrayList; 7 | 8 | 9 | public class BlackMetalBand implements Container 10 | { 11 | private ArrayList band; 12 | 13 | 14 | public BlackMetalBand() 15 | { 16 | band = new ArrayList(); 17 | } 18 | 19 | 20 | @Override 21 | public Iterator createItrator() 22 | { 23 | return new BlackMetalIterator(); 24 | } 25 | 26 | 27 | @Override 28 | public void addMember(Object newMember) 29 | { 30 | band.add((Musician)newMember); 31 | } 32 | 33 | private class BlackMetalIterator implements Iterator 34 | { 35 | private int position; 36 | 37 | @Override 38 | public boolean hasNext() 39 | { 40 | return band.size() > position; 41 | } 42 | 43 | @Override 44 | public Object next() 45 | { 46 | return band.get(position++); 47 | } 48 | } 49 | } 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/iterator/chains/Container.java: -------------------------------------------------------------------------------- 1 | package iterator.chains; 2 | 3 | 4 | import iterator.iterator.Iterator; 5 | 6 | public interface Container 7 | { 8 | Iterator createItrator(); 9 | 10 | void addMember(Object o); 11 | } 12 | -------------------------------------------------------------------------------- /src/iterator/chains/VikingMetalBand.java: -------------------------------------------------------------------------------- 1 | package iterator.chains; 2 | 3 | import iterator.entity.Musician; 4 | import iterator.iterator.Iterator; 5 | 6 | import java.util.*; 7 | 8 | 9 | public class VikingMetalBand implements Container 10 | { 11 | private Map band; 12 | 13 | 14 | public VikingMetalBand() 15 | { 16 | band = new HashMap(); 17 | } 18 | 19 | 20 | @Override 21 | public Iterator createItrator() 22 | { 23 | return new VikingMetalIterator(); 24 | } 25 | 26 | 27 | @Override 28 | public void addMember(Object newMember) 29 | { 30 | band.put(((Musician)newMember).name.toString(), (Musician)newMember); 31 | } 32 | 33 | private class VikingMetalIterator implements Iterator 34 | { 35 | private int position; 36 | 37 | @Override 38 | public boolean hasNext() 39 | { 40 | return band.size() > position; 41 | } 42 | 43 | @Override 44 | public Object next() 45 | { 46 | return band.values().toArray()[position++]; 47 | } 48 | } 49 | } 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/iterator/entity/Musician.java: -------------------------------------------------------------------------------- 1 | package iterator.entity; 2 | 3 | 4 | public class Musician 5 | { 6 | public String name; 7 | public Role role; 8 | 9 | public Musician(String name, Role role) 10 | { 11 | this.name = name; 12 | this.role = role; 13 | } 14 | 15 | @Override 16 | public String toString() 17 | { 18 | return name +" (" + role +")"; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/iterator/entity/Role.java: -------------------------------------------------------------------------------- 1 | package iterator.entity; 2 | 3 | 4 | public enum Role 5 | { 6 | vocal, 7 | guitar, 8 | bass, 9 | drum, 10 | piano 11 | } 12 | -------------------------------------------------------------------------------- /src/iterator/iterator/Iterator.java: -------------------------------------------------------------------------------- 1 | package iterator.iterator; 2 | 3 | 4 | public interface Iterator 5 | { 6 | boolean hasNext(); 7 | Object next(); 8 | } 9 | -------------------------------------------------------------------------------- /src/mediator/Chat.java: -------------------------------------------------------------------------------- 1 | package mediator; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * Created by pc on 14.02.2016. 7 | */ 8 | public class Chat { 9 | public static void showMessage(User user, String message){ 10 | System.out.println(new Date() + ", " + user.getNick() + ": " + message); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/mediator/Main.java: -------------------------------------------------------------------------------- 1 | package mediator; 2 | 3 | /** 4 | * Created by pc on 14.02.2016. 5 | */ 6 | public class Main { 7 | public static void main(String[] args) { 8 | User dart = new User("Dart"); 9 | User chebi = new User("Chebi"); 10 | dart.sendMessage("I'm your father"); 11 | chebi.sendMessage("Oh no!!"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/mediator/User.java: -------------------------------------------------------------------------------- 1 | package mediator; 2 | 3 | /** 4 | * Created by pc on 14.02.2016. 5 | */ 6 | public class User { 7 | private String nick; 8 | 9 | public User(String nick) { 10 | this.nick = nick; 11 | } 12 | 13 | public String getNick() { 14 | return nick; 15 | } 16 | 17 | public void setNick(String nick) { 18 | this.nick = nick; 19 | } 20 | 21 | public void sendMessage(String message){ 22 | Chat.showMessage(this, message); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/memento/CareTaker.java: -------------------------------------------------------------------------------- 1 | package memento; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * Created by pc on 19.02.2016. 8 | */ 9 | //restores object state from Memento 10 | public class CareTaker { 11 | private List mementos = new ArrayList<>(); 12 | 13 | public void add(Memento memento){ 14 | mementos.add(memento); 15 | } 16 | public Memento get(int i){ 17 | return mementos.get(i); 18 | } 19 | 20 | public int last(){ 21 | return mementos.size()-1; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/memento/Main.java: -------------------------------------------------------------------------------- 1 | package memento; 2 | 3 | /** 4 | * Created by pc on 19.02.2016. 5 | */ 6 | public class Main { 7 | 8 | public static void main(String[] args) { 9 | Originator originator = new Originator(); 10 | CareTaker careTaker = new CareTaker(); 11 | originator.setState("1v"); 12 | originator.setState("2v"); 13 | originator.setState("3v"); 14 | originator.setState("4v"); 15 | careTaker.add(originator.saveStateToMemento()); 16 | originator.setState("5v"); 17 | originator.setState("6v"); 18 | careTaker.add(originator.saveStateToMemento()); 19 | originator.setState("7v"); 20 | System.out.println("Current state: " + originator.getState()); 21 | originator.getStateFromMemento(careTaker.get(0)); 22 | System.out.println("1st saved state: " + originator.getState()); 23 | originator.getStateFromMemento(careTaker.get(careTaker.last())); 24 | System.out.println("las saved state: " + originator.getState()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/memento/Memento.java: -------------------------------------------------------------------------------- 1 | package memento; 2 | 3 | /** 4 | * Created by pc on 19.02.2016. 5 | */ 6 | //contains a state of object to be restored 7 | public class Memento { 8 | private String state; 9 | 10 | public Memento(String state) { 11 | this.state = state; 12 | } 13 | 14 | public String getState() { 15 | return state; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/memento/Originator.java: -------------------------------------------------------------------------------- 1 | package memento; 2 | 3 | /** 4 | * Created by pc on 19.02.2016. 5 | */ 6 | //creates and saves object states in Memento object 7 | public class Originator { 8 | private String state; 9 | 10 | public void setState(String state) { 11 | this.state = state; 12 | } 13 | 14 | public String getState() { 15 | return state; 16 | } 17 | 18 | public void getStateFromMemento(Memento memento){ 19 | state = memento.getState(); 20 | } 21 | 22 | public Memento saveStateToMemento(){ 23 | return new Memento(state); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/observer/BinaryObserver.java: -------------------------------------------------------------------------------- 1 | package observer; 2 | 3 | /** 4 | * Created by pc on 14.03.2016. 5 | */ 6 | public class BinaryObserver extends Observer { 7 | @Override 8 | public void update() { 9 | System.out.println("Binary String: "+Integer.toBinaryString(subject.getState())); 10 | } 11 | 12 | public BinaryObserver(Subject subject){ 13 | this.subject = subject; 14 | this.subject.attach(this); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/observer/HexaObserver.java: -------------------------------------------------------------------------------- 1 | package observer; 2 | 3 | /** 4 | * Created by pc on 14.03.2016. 5 | */ 6 | public class HexaObserver extends Observer { 7 | public HexaObserver(Subject subject){ 8 | this.subject = subject; 9 | this.subject.attach(this); 10 | } 11 | 12 | @Override 13 | public void update() { 14 | System.out.println( "Hex String: " + Integer.toHexString( subject.getState() ).toUpperCase() ); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/observer/Main.java: -------------------------------------------------------------------------------- 1 | package observer; 2 | 3 | /** 4 | * Created by pc on 14.03.2016. 5 | */ 6 | public class Main { 7 | public static void main(String[] args) { 8 | Subject subject = new Subject(); 9 | 10 | new HexaObserver(subject); 11 | new OctalObserver(subject); 12 | new BinaryObserver(subject); 13 | 14 | System.out.println("First state change: 15"); 15 | subject.setState(15); 16 | System.out.println("Second state change: 10"); 17 | subject.setState(10); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/observer/Observer.java: -------------------------------------------------------------------------------- 1 | package observer; 2 | 3 | /** 4 | * Created by pc on 14.03.2016. 5 | */ 6 | public abstract class Observer { 7 | protected Subject subject; 8 | public abstract void update(); 9 | } 10 | -------------------------------------------------------------------------------- /src/observer/OctalObserver.java: -------------------------------------------------------------------------------- 1 | package observer; 2 | 3 | /** 4 | * Created by pc on 14.03.2016. 5 | */ 6 | public class OctalObserver extends Observer { 7 | public OctalObserver(Subject subject){ 8 | this.subject = subject; 9 | this.subject.attach(this); 10 | } 11 | 12 | @Override 13 | public void update() { 14 | System.out.println( "Octal String: " + Integer.toOctalString( subject.getState() ) ); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/observer/Subject.java: -------------------------------------------------------------------------------- 1 | package observer; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * Created by pc on 14.03.2016. 8 | */ 9 | public class Subject { 10 | 11 | private List observers = new ArrayList(); 12 | private int state; 13 | 14 | public int getState() { 15 | return state; 16 | } 17 | 18 | public void setState(int state) { 19 | this.state = state; 20 | notifyAllObservers(); 21 | } 22 | 23 | public void attach(Observer observer){ 24 | observers.add(observer); 25 | } 26 | 27 | public void notifyAllObservers(){ 28 | for (Observer observer : observers) { 29 | observer.update(); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/prototype/Main.java: -------------------------------------------------------------------------------- 1 | package prototype; 2 | 3 | import prototype.button.ActionButton; 4 | import prototype.button.Button; 5 | 6 | /** 7 | * Created by pc on 26.01.2016. 8 | */ 9 | public class Main { 10 | public static void main(String ... args){ 11 | 12 | Button actionButton = new ActionButton(); 13 | actionButton.setId("1"); 14 | actionButton.setText("first Button"); 15 | actionButton.setPositionX(1); 16 | actionButton.setPositionY(2); 17 | 18 | System.out.print(actionButton.clone()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/prototype/button/ActionButton.java: -------------------------------------------------------------------------------- 1 | package prototype.button; 2 | 3 | /** 4 | * Created by pc on 26.01.2016. 5 | */ 6 | public class ActionButton extends Button { 7 | @Override 8 | public String toString() { 9 | return "ActionButton "+ super.toString(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/prototype/button/Button.java: -------------------------------------------------------------------------------- 1 | package prototype.button; 2 | 3 | /** 4 | * Created by pc on 26.01.2016. 5 | */ 6 | public class Button { 7 | private String id; 8 | private double positionX; 9 | private double positionY; 10 | private String text; 11 | 12 | public void setId(String id) { 13 | this.id = id; 14 | } 15 | 16 | public void setPositionX(double positionX) { 17 | this.positionX = positionX; 18 | } 19 | 20 | public void setPositionY(double positionY) { 21 | this.positionY = positionY; 22 | } 23 | 24 | public void setText(String text) { 25 | this.text = text; 26 | } 27 | 28 | public Button clone(){ 29 | Button newButton = null; 30 | try { 31 | newButton = this.getClass().newInstance(); 32 | } catch (InstantiationException e) { 33 | e.printStackTrace(); 34 | } catch (IllegalAccessException e) { 35 | e.printStackTrace(); 36 | } 37 | newButton.id=new String(this.id); 38 | newButton.text=new String(this.text); 39 | newButton.positionX=this.positionX; 40 | newButton.positionY=this.positionY; 41 | return newButton; 42 | } 43 | 44 | @Override 45 | public String toString() { 46 | return "Button{" + 47 | "id='" + id + '\'' + 48 | ", positionX=" + positionX + 49 | ", positionY=" + positionY + 50 | ", text='" + text + '\'' + 51 | '}'; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/prototype/button/ExitButton.java: -------------------------------------------------------------------------------- 1 | package prototype.button; 2 | 3 | /** 4 | * Created by pc on 26.01.2016. 5 | */ 6 | public class ExitButton extends Button { 7 | @Override 8 | public String toString() { 9 | return "ExitButton "+ super.toString(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/prototype/button/StartButton.java: -------------------------------------------------------------------------------- 1 | package prototype.button; 2 | 3 | /** 4 | * Created by pc on 26.01.2016. 5 | */ 6 | public class StartButton extends Button{ 7 | @Override 8 | public String toString() { 9 | return "StartButton"+ super.toString(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/proxy/Image.java: -------------------------------------------------------------------------------- 1 | package proxy; 2 | 3 | /** 4 | * Created by pc on 14.02.2016. 5 | */ 6 | public interface Image { 7 | void draw(); 8 | } 9 | -------------------------------------------------------------------------------- /src/proxy/ImageProxy.java: -------------------------------------------------------------------------------- 1 | package proxy; 2 | 3 | /** 4 | * Created by pc on 14.02.2016. 5 | */ 6 | public class ImageProxy implements Image { 7 | private RealImage realImage; 8 | private String imageName; 9 | 10 | @Override 11 | public void draw() { 12 | if (realImage==null) { 13 | realImage = new RealImage(imageName); 14 | } 15 | realImage.draw(); 16 | } 17 | 18 | public ImageProxy(String imageName) { 19 | this.imageName = imageName; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/proxy/Main.java: -------------------------------------------------------------------------------- 1 | package proxy; 2 | 3 | /** 4 | * Created by pc on 14.02.2016. 5 | */ 6 | public class Main { 7 | 8 | public static void main(String ... args) { 9 | Image image = new ImageProxy("Image.JPG"); 10 | System.out.println("Drawing first time"); 11 | image.draw(); 12 | System.out.println("Drawing next time"); 13 | image.draw(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/proxy/RealImage.java: -------------------------------------------------------------------------------- 1 | package proxy; 2 | 3 | /** 4 | * Created by pc on 14.02.2016. 5 | */ 6 | public class RealImage implements Image { 7 | private String name; 8 | 9 | @Override 10 | public void draw() { 11 | System.out.println(name + "Drawn"); 12 | } 13 | 14 | public RealImage(String name) { 15 | this.name = name; 16 | loadImage(name); 17 | } 18 | 19 | public void loadImage(String fileName){ 20 | System.out.println("Loading" + fileName); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/singleton/Main.java: -------------------------------------------------------------------------------- 1 | package singleton; 2 | 3 | /** 4 | * Created by pc on 22.01.2016. 5 | */ 6 | public class Main { 7 | public static void main(String ... args){ 8 | System.out.println(Singleton.getInstance().getName()); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/singleton/Singleton.java: -------------------------------------------------------------------------------- 1 | package singleton; 2 | 3 | /** 4 | * Created by pc on 22.01.2016. 5 | */ 6 | public class Singleton { 7 | private String name; 8 | private static Singleton instance; 9 | 10 | public String getName() { 11 | return name; 12 | } 13 | 14 | private Singleton() { 15 | name = "Single Instance"; 16 | } 17 | 18 | public static synchronized Singleton getInstance() { 19 | if (instance == null) 20 | instance = new Singleton(); 21 | 22 | return instance; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/state/Main.java: -------------------------------------------------------------------------------- 1 | package state; 2 | 3 | import state.model.*; 4 | 5 | public class Main { 6 | 7 | public static void main(String[] args) { 8 | Context context = new Context(); 9 | StartState startState = new StartState(); 10 | StopState stopState = new StopState(); 11 | 12 | startState.doAction(context); 13 | System.out.println(context.getState()); 14 | 15 | 16 | stopState.doAction(context); 17 | System.out.println(context.getState()); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/state/model/Context.java: -------------------------------------------------------------------------------- 1 | package state.model; 2 | 3 | import state.model.State; 4 | 5 | public class Context 6 | { 7 | private State state; 8 | 9 | public State getState() 10 | { 11 | return state; 12 | } 13 | 14 | public void setState(State state) 15 | { 16 | this.state = state; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/state/model/StartState.java: -------------------------------------------------------------------------------- 1 | package state.model; 2 | 3 | 4 | public class StartState implements State 5 | { 6 | @Override 7 | public void doAction(Context context) 8 | { 9 | context.setState(this); 10 | System.out.println("Started"); 11 | } 12 | 13 | @Override 14 | public String toString() 15 | { 16 | return "Start State"; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/state/model/State.java: -------------------------------------------------------------------------------- 1 | package state.model; 2 | 3 | 4 | public interface State 5 | { 6 | public void doAction(Context context); 7 | } 8 | -------------------------------------------------------------------------------- /src/state/model/StopState.java: -------------------------------------------------------------------------------- 1 | package state.model; 2 | 3 | public class StopState implements State 4 | { 5 | @Override 6 | public void doAction(Context context) 7 | { 8 | context.setState(this); 9 | System.out.println("Stopped"); 10 | } 11 | 12 | @Override 13 | public String toString() 14 | { 15 | return "Stop State"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/strategy/AbstractStrategy.java: -------------------------------------------------------------------------------- 1 | package strategy; 2 | 3 | /** 4 | * Created by pc on 15.11.2015. 5 | */ 6 | abstract public class AbstractStrategy { 7 | abstract public int doOperation(int a, int b); 8 | } 9 | -------------------------------------------------------------------------------- /src/strategy/ConcreteStrategyAdd.java: -------------------------------------------------------------------------------- 1 | package strategy; 2 | 3 | /** 4 | * Created by pc on 15.11.2015. 5 | */ 6 | public class ConcreteStrategyAdd extends AbstractStrategy { 7 | @Override 8 | public int doOperation(int a, int b) { 9 | System.out.println("Operation: a + b"); 10 | return a+b; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/strategy/ConcreteStrategyDiv.java: -------------------------------------------------------------------------------- 1 | package strategy; 2 | 3 | /** 4 | * Created by pc on 15.11.2015. 5 | */ 6 | public class ConcreteStrategyDiv extends AbstractStrategy { 7 | @Override 8 | public int doOperation(int a, int b) { 9 | System.out.println("Operation: a div b"); 10 | return a/b; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/strategy/ConcreteStrategyMinus.java: -------------------------------------------------------------------------------- 1 | package strategy; 2 | 3 | /** 4 | * Created by pc on 15.11.2015. 5 | */ 6 | public class ConcreteStrategyMinus extends AbstractStrategy { 7 | @Override 8 | public int doOperation(int a, int b) { 9 | System.out.println("Operation: a - b"); 10 | return a-b; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/strategy/ConcreteStrategyMod.java: -------------------------------------------------------------------------------- 1 | package strategy; 2 | 3 | /** 4 | * Created by pc on 15.11.2015. 5 | */ 6 | public class ConcreteStrategyMod extends AbstractStrategy { 7 | @Override 8 | public int doOperation(int a, int b) { 9 | System.out.println("Operation: a mod b"); 10 | return a%b; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/strategy/ConcreteStrategyMultiply.java: -------------------------------------------------------------------------------- 1 | package strategy; 2 | 3 | /** 4 | * Created by pc on 15.11.2015. 5 | */ 6 | public class ConcreteStrategyMultiply extends AbstractStrategy { 7 | @Override 8 | public int doOperation(int a, int b) { 9 | System.out.println("Operation: a * b"); 10 | return a*b; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/strategy/ConcreteStrategyPower.java: -------------------------------------------------------------------------------- 1 | package strategy; 2 | 3 | /** 4 | * Created by pc on 15.11.2015. 5 | */ 6 | public class ConcreteStrategyPower extends AbstractStrategy { 7 | @Override 8 | public int doOperation(int a, int b) { 9 | System.out.println("Operation: Pow(a, b)"); 10 | return (int)Math.pow(a, b); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/strategy/Context.java: -------------------------------------------------------------------------------- 1 | package strategy; 2 | 3 | /** 4 | * Created by pc on 15.11.2015. 5 | */ 6 | public class Context { 7 | private AbstractStrategy strategy; 8 | 9 | public Context(AbstractStrategy strategy) { 10 | this.strategy = strategy; 11 | } 12 | public int executeStrategy(int a, int b){ 13 | return strategy.doOperation(a, b); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/strategy/Main.java: -------------------------------------------------------------------------------- 1 | package strategy; 2 | 3 | /** 4 | * Created by pc on 15.11.2015. 5 | */ 6 | public class Main { 7 | public static void main(String args[]){ 8 | Context context=new Context(new ConcreteStrategyAdd()); 9 | int resultStrategyAdd=context.executeStrategy(23,4); 10 | 11 | context=new Context(new ConcreteStrategyMinus()); 12 | resultStrategyAdd=context.executeStrategy(23,4); 13 | 14 | 15 | context=new Context(new ConcreteStrategyDiv()); 16 | resultStrategyAdd=context.executeStrategy(23,4); 17 | 18 | 19 | context=new Context(new ConcreteStrategyMod()); 20 | resultStrategyAdd=context.executeStrategy(23,4); 21 | 22 | 23 | context=new Context(new ConcreteStrategyMultiply()); 24 | resultStrategyAdd=context.executeStrategy(23,4); 25 | 26 | 27 | context=new Context(new ConcreteStrategyPower()); 28 | resultStrategyAdd=context.executeStrategy(23,4); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/templateMethod/Main.java: -------------------------------------------------------------------------------- 1 | package templateMethod; 2 | 3 | import templateMethod.template.Game; 4 | import templateMethod.template.WorldOfTanks; 5 | import templateMethod.template.Wow; 6 | 7 | /** 8 | * Created by pc on 14.02.2016. 9 | */ 10 | public class Main { 11 | 12 | public static void main(String[] args) { 13 | Game game = new Wow(); 14 | game.play(); 15 | 16 | game = new WorldOfTanks(); 17 | game.play(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/templateMethod/template/Game.java: -------------------------------------------------------------------------------- 1 | package templateMethod.template; 2 | 3 | /** 4 | * Created by pc on 14.02.2016. 5 | */ 6 | public abstract class Game { 7 | abstract void initialize(); 8 | abstract void startPlay(); 9 | abstract void endPlay(); 10 | 11 | public final void play(){ 12 | initialize(); 13 | startPlay(); 14 | endPlay(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/templateMethod/template/WorldOfTanks.java: -------------------------------------------------------------------------------- 1 | package templateMethod.template; 2 | 3 | /** 4 | * Created by pc on 14.02.2016. 5 | */ 6 | public class WorldOfTanks extends Game { 7 | @Override 8 | void initialize() { 9 | System.out.println("This is World of Tanks!"); 10 | } 11 | 12 | @Override 13 | void startPlay() { 14 | System.out.println("World of Tanks starts! Choose your tank!"); 15 | } 16 | 17 | @Override 18 | void endPlay() { 19 | System.out.println("World of Tanks game over"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/templateMethod/template/Wow.java: -------------------------------------------------------------------------------- 1 | package templateMethod.template; 2 | 3 | /** 4 | * Created by pc on 14.02.2016. 5 | */ 6 | public class Wow extends Game { 7 | 8 | @Override 9 | void initialize() { 10 | System.out.println("This is WoW!"); 11 | } 12 | 13 | @Override 14 | void startPlay() { 15 | System.out.println("WoW starts!"); 16 | } 17 | 18 | @Override 19 | void endPlay() { 20 | System.out.println("WoW game over..."); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/visitor/Main.java: -------------------------------------------------------------------------------- 1 | package visitor; 2 | 3 | import visitor.visitable.Alkane; 4 | import visitor.visitor.FormulaReader; 5 | 6 | /** 7 | * Created by pc on 15.01.2016. 8 | */ 9 | public class Main { 10 | public static void main(String[]args) { 11 | Alkane propane = new Alkane(3); 12 | propane.accept(new FormulaReader()); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/visitor/visitable/AbstractChemical.java: -------------------------------------------------------------------------------- 1 | package visitor.visitable; 2 | 3 | import visitor.visitor.FormulaReader; 4 | 5 | /** 6 | * Created by pc on 15.01.2016. 7 | */ 8 | public abstract class AbstractChemical implements Visitable { 9 | public abstract void accept(FormulaReader visitor); 10 | } 11 | -------------------------------------------------------------------------------- /src/visitor/visitable/Alkane.java: -------------------------------------------------------------------------------- 1 | package visitor.visitable; 2 | 3 | import visitor.visitor.FormulaReader; 4 | 5 | import java.util.ArrayList; 6 | 7 | /** 8 | * Created by pc on 15.01.2016. 9 | */ 10 | public class Alkane extends AbstractChemical { 11 | public ArrayList elements; 12 | 13 | public Alkane(int oxygenK){ 14 | elements=new ArrayList<>(); 15 | elements.add(new Carbon()); 16 | for (;oxygenK>0;) 17 | { 18 | elements.add(new Carbon()); 19 | elements.add(new Oxygen()); 20 | elements.add(new Carbon()); 21 | oxygenK-=1; 22 | } 23 | elements.add(new Carbon()); 24 | } 25 | 26 | @Override 27 | public void accept(FormulaReader visitor) { 28 | for (AbstractChemical element:elements){ 29 | element.accept(visitor); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/visitor/visitable/Carbon.java: -------------------------------------------------------------------------------- 1 | package visitor.visitable; 2 | 3 | import visitor.visitor.FormulaReader; 4 | 5 | /** 6 | * Created by pc on 15.01.2016. 7 | */ 8 | public class Carbon extends AbstractChemical { 9 | @Override 10 | public void accept(FormulaReader visitor) { 11 | visitor.visit(this); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/visitor/visitable/Oxygen.java: -------------------------------------------------------------------------------- 1 | package visitor.visitable; 2 | 3 | import visitor.visitor.FormulaReader; 4 | 5 | /** 6 | * Created by pc on 15.01.2016. 7 | */ 8 | public class Oxygen extends AbstractChemical{ 9 | 10 | @Override 11 | public void accept(FormulaReader visitor) { 12 | visitor.visit(this); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/visitor/visitable/Visitable.java: -------------------------------------------------------------------------------- 1 | package visitor.visitable; 2 | 3 | /** 4 | * Created by pc on 15.01.2016. 5 | */ 6 | //marker interface 7 | public interface Visitable { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/visitor/visitor/FormulaReader.java: -------------------------------------------------------------------------------- 1 | package visitor.visitor; 2 | 3 | import visitor.visitable.Alkane; 4 | import visitor.visitable.Carbon; 5 | import visitor.visitable.Oxygen; 6 | 7 | /** 8 | * Created by pc on 15.01.2016. 9 | */ 10 | public class FormulaReader implements Visitor { 11 | public void visit(Alkane alkane){ 12 | } 13 | 14 | 15 | public void visit(Carbon carbon){ 16 | System.out.print("H"); 17 | } 18 | 19 | 20 | public void visit(Oxygen oxygen){ 21 | System.out.print("-O-"); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/visitor/visitor/Visitor.java: -------------------------------------------------------------------------------- 1 | package visitor.visitor; 2 | 3 | /** 4 | * Created by pc on 15.01.2016. 5 | */ 6 | //marker interface 7 | public interface Visitor { 8 | } 9 | --------------------------------------------------------------------------------