├── 10_mediatormemento
├── mediator
│ ├── ex1
│ │ └── Mediator
│ │ │ ├── Colleague.h
│ │ │ ├── ConcreteColleague1.h
│ │ │ ├── ConcreteColleague2.h
│ │ │ ├── ConcreteMediator.h
│ │ │ ├── Mediator.cbp
│ │ │ ├── Mediator.depend
│ │ │ ├── Mediator.h
│ │ │ ├── Mediator.layout
│ │ │ └── MediatorMain.cpp
│ ├── ex2
│ │ └── Chatroom.cpp
│ ├── ex3
│ │ └── Thread2.cpp
│ └── ex4
│ │ └── PanelMediator.cpp
└── memento
│ ├── ex1
│ └── Memento
│ │ ├── Caretaker.h
│ │ ├── Memento.cbp
│ │ ├── Memento.depend
│ │ ├── Memento.h
│ │ ├── Memento.layout
│ │ ├── MementoMain.cpp
│ │ └── Originator.h
│ ├── ex2
│ ├── Caretaker.h
│ ├── Memento.cbp
│ ├── Memento.depend
│ ├── Memento.h
│ ├── Memento.layout
│ ├── MementoMain.cpp
│ └── Originator.h
│ └── ex3
│ └── Number.cpp
├── 11_observerstate
└── 11_observerstate
│ ├── observer
│ ├── Project1
│ │ ├── Debug
│ │ │ ├── Project1.exe
│ │ │ ├── Project1.ilk
│ │ │ └── Project1.pdb
│ │ ├── Project1.sln
│ │ └── Project1
│ │ │ ├── Debug
│ │ │ ├── Project1.log
│ │ │ ├── Project1.tlog
│ │ │ │ ├── CL.command.1.tlog
│ │ │ │ ├── CL.read.1.tlog
│ │ │ │ ├── CL.write.1.tlog
│ │ │ │ ├── Project1.lastbuildstate
│ │ │ │ ├── link.command.1.tlog
│ │ │ │ ├── link.read.1.tlog
│ │ │ │ └── link.write.1.tlog
│ │ │ ├── Source.obj
│ │ │ ├── vc141.idb
│ │ │ └── vc141.pdb
│ │ │ ├── Project1.vcxproj
│ │ │ ├── Project1.vcxproj.filters
│ │ │ └── Source.cpp
│ ├── ex1
│ │ └── Observer
│ │ │ ├── ConcreteObserver.h
│ │ │ ├── ConcreteSubject.h
│ │ │ ├── Observer.cbp
│ │ │ ├── Observer.depend
│ │ │ ├── Observer.h
│ │ │ ├── Observer.layout
│ │ │ ├── ObserverMain.cpp
│ │ │ └── Subject.h
│ ├── ex2
│ │ ├── Aukcija.cpp
│ │ ├── Aukcija.exe
│ │ └── Aukcija.o
│ ├── ex3
│ │ └── YouTube.cpp
│ └── ex4
│ │ └── PlayerObserver.cpp
│ └── state
│ ├── ex1
│ └── State
│ │ ├── ConcreteStateA.h
│ │ ├── ConcreteStateB.h
│ │ ├── Context.h
│ │ ├── State.cbp
│ │ ├── State.depend
│ │ ├── State.h
│ │ ├── State.layout
│ │ ├── StateMain.cpp
│ │ ├── bin
│ │ └── Debug
│ │ │ └── State.exe
│ │ └── obj
│ │ └── Debug
│ │ └── StateMain.o
│ ├── ex2
│ └── TCPConnection.cpp
│ ├── ex3
│ └── DFAState.cpp
│ └── ex4
│ └── PlayerState.cpp
├── 12_strategytemplate
├── strategy
│ ├── ex1
│ │ └── Strategy
│ │ │ ├── ConcreteStrategyA.h
│ │ │ ├── ConcreteStrategyB.h
│ │ │ ├── ConcreteStrategyC.h
│ │ │ ├── Context.h
│ │ │ ├── Strategy.cbp
│ │ │ ├── Strategy.depend
│ │ │ ├── Strategy.h
│ │ │ ├── Strategy.layout
│ │ │ ├── StrategyMain.cpp
│ │ │ ├── bin
│ │ │ └── Debug
│ │ │ │ └── Strategy.exe
│ │ │ └── obj
│ │ │ └── Debug
│ │ │ └── StrategyMain.o
│ ├── ex2
│ │ └── TextFormatter.cpp
│ ├── ex3
│ │ └── Sort.cpp
│ ├── ex4
│ │ └── String.cpp
│ └── ex5
│ │ └── GamePlayer.cpp
└── template_method
│ ├── ex1
│ └── TemplateMethod
│ │ ├── AbstractClass.h
│ │ ├── ConcreteClass.h
│ │ ├── TemplateMethod.cbp
│ │ ├── TemplateMethod.cpp
│ │ ├── TemplateMethod.depend
│ │ ├── TemplateMethod.layout
│ │ ├── bin
│ │ └── Debug
│ │ │ └── TemplateMethod.exe
│ │ └── obj
│ │ └── Debug
│ │ └── TemplateMethod.o
│ ├── ex2
│ └── Shape.cpp
│ └── ex3
│ └── Game.cpp
├── 13_visitor
├── ex1
│ └── Visitor
│ │ ├── ConcreteElementA.h
│ │ ├── ConcreteElementB.h
│ │ ├── ConcreteVisitor1.h
│ │ ├── ConcreteVisitor2.h
│ │ ├── Element.h
│ │ ├── ObjectStructure.h
│ │ ├── Visitor.cbp
│ │ ├── Visitor.depend
│ │ ├── Visitor.h
│ │ ├── Visitor.layout
│ │ └── VisitorMain.cpp
├── ex2
│ └── PointVisitor.cpp
└── ex3
│ └── ShapeVisitor.cpp
├── 1_streams
├── cin_cout.cpp
├── custom_in_out.cpp
├── fin_fout.cpp
├── fin_fout_binary.cpp
├── imenik1.txt
├── imenik2.txt
├── imenik3.txt
├── imenik_primer.cpp
├── matrica.cpp
├── stringstream_example.cpp
├── stringstream_primer.cpp
├── test1.txt
├── test2.txt
└── ulaz.txt
├── 2_abstractbuilder
├── abstract_factory
│ ├── ex1
│ │ └── AbstractFactory
│ │ │ ├── AbstractFactory.cbp
│ │ │ ├── AbstractFactory.depend
│ │ │ ├── AbstractFactory.h
│ │ │ ├── AbstractFactory.layout
│ │ │ ├── AbstractFactoryMain.cpp
│ │ │ ├── AbstractProductA.h
│ │ │ ├── AbstractProductB.h
│ │ │ ├── ConcreteFactory1.cpp
│ │ │ ├── ConcreteFactory1.h
│ │ │ ├── ConcreteFactory2.cpp
│ │ │ ├── ConcreteFactory2.h
│ │ │ ├── ConcreteProductA1.cpp
│ │ │ ├── ConcreteProductA1.h
│ │ │ ├── ConcreteProductA2.cpp
│ │ │ ├── ConcreteProductA2.h
│ │ │ ├── ConcreteProductB1.cpp
│ │ │ ├── ConcreteProductB1.h
│ │ │ ├── ConcreteProductB2.cpp
│ │ │ ├── ConcreteProductB2.h
│ │ │ ├── bin
│ │ │ └── Debug
│ │ │ │ └── AbstractFactory.exe
│ │ │ └── obj
│ │ │ └── Debug
│ │ │ ├── AbstractFactoryMain.o
│ │ │ ├── ConcreteFactory1.o
│ │ │ ├── ConcreteFactory2.o
│ │ │ ├── ConcreteProductA1.o
│ │ │ ├── ConcreteProductA2.o
│ │ │ ├── ConcreteProductB1.o
│ │ │ └── ConcreteProductB2.o
│ ├── ex2
│ │ ├── nakon_primene_sablona.cpp
│ │ └── pre_primene_sablona.cpp
│ ├── ex3
│ │ └── FabrikaOblika.cpp
│ └── ex5
│ │ └── FabrikaZivotinja.cpp
└── builder
│ ├── ex1
│ └── Builder
│ │ ├── Builder.cbp
│ │ ├── Builder.depend
│ │ ├── Builder.h
│ │ ├── Builder.layout
│ │ ├── BuilderMain.cpp
│ │ ├── ConcreteBuilder.h
│ │ ├── Director.h
│ │ ├── Product.h
│ │ ├── bin
│ │ └── Debug
│ │ │ └── Builder.exe
│ │ └── obj
│ │ └── Debug
│ │ └── BuilderMain.o
│ ├── ex2
│ └── GraditeljProizvoda
│ │ ├── Graditelj.h
│ │ ├── GraditeljProizvoda.cbp
│ │ ├── GraditeljProizvoda.depend
│ │ ├── GraditeljProizvoda.layout
│ │ ├── Proizvod.cpp
│ │ ├── Proizvod.h
│ │ ├── ProizvodMain.cpp
│ │ ├── bin
│ │ └── Debug
│ │ │ └── GraditeljProizvoda.exe
│ │ └── obj
│ │ └── Debug
│ │ ├── Proizvod.o
│ │ └── ProizvodMain.o
│ ├── ex3
│ └── PicaGraditelj.cpp
│ ├── ex4
│ └── KonvertorTeksta.cpp
│ └── ex5
│ └── GraditeljAviona.cpp
├── 3_factorymethodprototype
├── factory_method
│ ├── ex1
│ │ └── FactoryMethod
│ │ │ ├── ConcreteCreator.cpp
│ │ │ ├── ConcreteCreator.h
│ │ │ ├── ConcreteProduct.cpp
│ │ │ ├── ConcreteProduct.h
│ │ │ ├── Creator.h
│ │ │ ├── FactoryMethod.cbp
│ │ │ ├── FactoryMethod.depend
│ │ │ ├── FactoryMethod.layout
│ │ │ ├── FactoryMethodMain.cpp
│ │ │ └── Product.h
│ ├── ex2
│ │ └── MelodijaFabrickiMetod.cpp
│ ├── ex3
│ │ └── DokumentFabrickiMetod.cpp
│ ├── ex4
│ │ └── MobilniPaketMetod.cpp
│ ├── ex5
│ │ └── PicaFabrickiMetod.cpp
│ └── ex6
│ │ ├── nakon_upotrebe_fabrickog_metoda.cpp
│ │ └── pre_upotrebe_fabrickog_metoda.cpp
└── prototype
│ ├── ex1
│ └── Prototype
│ │ ├── ConcretePrototype1.cpp
│ │ ├── ConcretePrototype1.h
│ │ ├── ConcretePrototype2.cpp
│ │ ├── ConcretePrototype2.h
│ │ ├── Prototype.cbp
│ │ ├── Prototype.depend
│ │ ├── Prototype.h
│ │ ├── Prototype.layout
│ │ └── PrototypeMain.cpp
│ ├── ex2
│ └── OsobaPrototip.cpp
│ ├── ex3
│ └── ObjekatPrototip.cpp
│ ├── ex4
│ └── celija.cpp
│ └── ex5
│ └── PrototipSlike.cpp
├── 4_singletonadapter
├── adapter
│ ├── ex1
│ │ └── ClassAdapter
│ │ │ ├── Adaptee.h
│ │ │ ├── Adapter.h
│ │ │ ├── AdapterMain.cpp
│ │ │ ├── ClassAdapter.cbp
│ │ │ ├── ClassAdapter.depend
│ │ │ ├── ClassAdapter.layout
│ │ │ └── Target.h
│ ├── ex2
│ │ └── ObjectAdapter
│ │ │ ├── Adaptee.h
│ │ │ ├── Adapter.h
│ │ │ ├── AdapterMain.cpp
│ │ │ ├── ClassAdapter.layout
│ │ │ ├── ObjectAdapter.cbp
│ │ │ ├── ObjectAdapter.depend
│ │ │ ├── ObjectAdapter.layout
│ │ │ └── Target.h
│ ├── ex4
│ │ └── HashMap.cpp
│ ├── ex5
│ │ └── AdapterIzvrsavanje.cpp
│ └── ex6
│ │ └── RacuniAdapter.cpp
└── singleton
│ ├── ex1
│ └── Singleton
│ │ ├── Singleton.cbp
│ │ ├── Singleton.depend
│ │ ├── Singleton.h
│ │ ├── Singleton.layout
│ │ ├── SingletonMain.cpp
│ │ ├── bin
│ │ └── Debug
│ │ │ └── Singleton.exe
│ │ └── obj
│ │ └── Debug
│ │ └── SingletonMain.o
│ ├── ex3
│ ├── SingletonTemplate.cpp
│ └── SingletonTemplate2.cpp
│ ├── ex4
│ └── UpravljacStampaca.cpp
│ ├── ex5
│ └── FileSystem.cpp
│ └── ex6
│ ├── IspravanSingletonParalelan.cpp
│ ├── IspravanSingletonParalelan2.cpp
│ └── PogresanSingletonParalelan.cpp
├── 5_bridgecomposite
├── bridge
│ ├── ex1
│ │ └── Bridge
│ │ │ ├── Abstraction.h
│ │ │ ├── Bridge.cbp
│ │ │ ├── Bridge.depend
│ │ │ ├── Bridge.layout
│ │ │ ├── BridgeMain.cpp
│ │ │ ├── ConcreteImplementorA.h
│ │ │ ├── ConcreteImplementorB.h
│ │ │ ├── Implementor.h
│ │ │ └── RefinedAbstraction.h
│ ├── ex2
│ │ └── WindowBridge.cpp
│ ├── ex3
│ │ └── PorukaBridge.cpp
│ ├── ex4
│ │ ├── StekBridge.cpp
│ │ └── StekBridgeUniquePtr.cpp
│ └── ex5
│ │ └── CrtanjeBridge.cpp
├── composite
│ ├── ex1
│ │ └── CompositePattern
│ │ │ ├── Component.h
│ │ │ ├── Composite.h
│ │ │ ├── CompositeMain.cpp
│ │ │ ├── CompositePattern.cbp
│ │ │ ├── CompositePattern.depend
│ │ │ ├── CompositePattern.layout
│ │ │ └── Leaf.h
│ ├── ex2
│ │ └── Oprema.cpp
│ ├── ex3
│ │ └── CompositeTemplate.cpp
│ └── ex4
│ │ └── ElementiZaCrtanje.cpp
└── v5_07112019
│ ├── directories_composite.cpp
│ └── korpa_bridge.cpp
├── 6_facadedecorator
├── decorator
│ ├── ex1
│ │ └── Decorator
│ │ │ ├── Component.h
│ │ │ ├── ConcreteComponent.h
│ │ │ ├── ConcreteDecorator.h
│ │ │ ├── Decorator.cbp
│ │ │ ├── Decorator.depend
│ │ │ ├── Decorator.h
│ │ │ ├── Decorator.layout
│ │ │ └── DecoratorMain.cpp
│ ├── ex2
│ │ └── ProzorDopuna.cpp
│ ├── ex3
│ │ ├── ZivotinjaDecorator.cpp
│ │ ├── ZivotinjaDecorator.exe
│ │ └── ZivotinjaDecorator.o
│ ├── ex5
│ │ └── BibliotekaDopuna.cpp
│ └── ex6
│ │ └── StringDecorator.cpp
└── facade
│ ├── ex1
│ └── Facade
│ │ ├── Class1.h
│ │ ├── Class2.h
│ │ ├── Class3.h
│ │ ├── Facade.cbp
│ │ ├── Facade.depend
│ │ ├── Facade.h
│ │ ├── Facade.layout
│ │ └── FacadeMain.cpp
│ ├── ex2
│ └── FajlTransfer.cpp
│ ├── ex3
│ └── Kredit.cpp
│ ├── ex4
│ └── Kompjuter.cpp
│ └── ex5
│ └── Computer.cpp
├── 7_flyweightproxy
├── flyweight
│ ├── ex1
│ │ └── Flyweight
│ │ │ ├── ConcreteFlyweight.h
│ │ │ ├── Flyweight.cbp
│ │ │ ├── Flyweight.depend
│ │ │ ├── Flyweight.h
│ │ │ ├── Flyweight.layout
│ │ │ ├── FlyweightFactory.h
│ │ │ ├── FlyweightMain.cpp
│ │ │ └── UnsharedConcreteFlyweight.h
│ ├── ex3
│ │ └── SlovaMuva.cpp
│ ├── ex4
│ │ └── SlikeDrzava.cpp
│ └── ex5
│ │ └── RatnaIgra.cpp
└── proxy
│ ├── ex1
│ └── Proxy
│ │ ├── Proxy.cbp
│ │ ├── Proxy.depend
│ │ ├── Proxy.h
│ │ ├── Proxy.layout
│ │ ├── ProxyMain.cpp
│ │ ├── RealSubject.h
│ │ ├── Subject.h
│ │ ├── bin
│ │ └── Debug
│ │ │ └── Proxy.exe
│ │ └── obj
│ │ └── Debug
│ │ └── ProxyMain.o
│ ├── ex2
│ └── SlikaZastupnik.cpp
│ └── ex3
│ └── BankaZastupnik.cpp
├── 8_chainofresponsibilitycommand
└── 8_chainofresponsibilitycommand
│ ├── chain_of_responsibility
│ ├── ex1
│ │ └── ChainOfResponsibility
│ │ │ ├── ChainOfResponsibility.cbp
│ │ │ ├── ChainOfResponsibility.depend
│ │ │ ├── ChainOfResponsibility.layout
│ │ │ ├── ChainOfResponsibilityMain.cpp
│ │ │ ├── ConcreteHandler1.h
│ │ │ ├── ConcreteHandler2.h
│ │ │ ├── Handler.h
│ │ │ └── Request.h
│ ├── ex2
│ │ └── TesterDeljivosti.cpp
│ ├── ex3
│ │ └── TreeHandler.cpp
│ ├── ex4
│ │ └── FliperLanacOdgovornosti.cpp
│ └── ex5
│ │ └── ProzorLanacOdgovornosti.cpp
│ └── command
│ ├── ex1
│ └── Command
│ │ ├── Command.cbp
│ │ ├── Command.depend
│ │ ├── Command.h
│ │ ├── Command.layout
│ │ ├── CommandMain.cpp
│ │ ├── ConcreteCommand.h
│ │ ├── Invoker.h
│ │ └── Receiver.h
│ ├── ex2
│ └── DocumentCommand.cpp
│ ├── ex3
│ └── DigitronKomanda.cpp
│ └── ex4
│ └── IgracKomanda.cpp
├── 9_interpreteriterator
├── interpreter
│ ├── ex1
│ │ └── Interpreter
│ │ │ ├── AbstractExpression.h
│ │ │ ├── Context.h
│ │ │ ├── Interpreter.cbp
│ │ │ ├── Interpreter.depend
│ │ │ ├── Interpreter.layout
│ │ │ ├── InterpreterMain.cpp
│ │ │ ├── NonterminalExpression.h
│ │ │ └── TerminalExpression.h
│ ├── ex2
│ │ └── ExpressionIntepret.cpp
│ ├── ex3
│ │ └── BooleanExpression.cpp
│ └── ex4
│ │ └── RomanNumbersInterpreter.cpp
└── iterator
│ ├── ex1
│ └── Iterator
│ │ ├── Aggregate.h
│ │ ├── ConcreteAggregate.h
│ │ ├── ConcreteIterator.h
│ │ ├── Iterator.cbp
│ │ ├── Iterator.depend
│ │ ├── Iterator.h
│ │ ├── Iterator.layout
│ │ └── IteratorMain.cpp
│ ├── ex2
│ ├── StackIterator.cpp
│ └── StackIteratorOperators.cpp
│ ├── ex3
│ └── TemplateIterator.cpp
│ └── ex4
│ └── Tree.cpp
├── Alexander Shvets Design Patterns Explained Simply.pdf
├── Design Patterns, Elements of Reusable Object-Oriented Software.pdf
├── Lecture notes
├── 01. Abstract factory
│ ├── README.md
│ └── main.cpp
├── 04. Prototype
│ ├── README.md
│ ├── main.cpp
│ └── primer_2.cpp
├── 05. Singleton
│ ├── README.md
│ └── singleton.cpp
├── 06. Adapter
│ ├── AdapterClass.cpp
│ ├── AdapterObject.cpp
│ ├── README.md
│ └── primer_2.cpp
├── 07. Bridge
│ ├── README.md
│ ├── main.cpp
│ └── primer_2.cpp
├── 08. Composite
│ ├── README.md
│ └── main.cpp
├── 09. Decorator
│ ├── README.md
│ └── main.cpp
├── 10. Facade
│ ├── README.md
│ └── main.cpp
├── 11. Flyweight
│ ├── README.md
│ └── main.cpp
├── 12. Proxy
│ ├── README.md
│ └── main.cpp
├── 13. Chain of responsibility
│ └── main.cpp
├── 17. Mediator
│ └── main.cpp
├── 18. Memento
│ └── main.cpp
├── 19. Observer
│ └── main.cpp
├── 20. State
│ └── main.cpp
├── 21. Strategy
│ └── main.cpp
├── 22. Template Method
│ └── main.cpp
├── 23. Visitor
│ └── main.cpp
├── README.md
└── Sa predavanja
│ ├── Bridge
│ ├── primer1.cpp
│ └── primer3.cpp
│ ├── CRTP
│ └── crtp.cpp
│ ├── Chain Of Responsibility
│ └── Primer1.cpp
│ ├── Command
│ └── Command1.cpp
│ ├── Decorator
│ └── primer1.cpp
│ ├── Facade
│ └── primer1.cpp
│ ├── Iterator
│ └── iterator.cpp
│ ├── Mediator
│ └── Mediator.cpp
│ ├── Memento
│ └── Memento.cpp
│ ├── Observer
│ └── Observer.cpp
│ ├── Prototype
│ └── primer2.cpp
│ ├── Proxy
│ ├── primer1.cpp
│ └── vector.cpp
│ └── Visitor
│ └── Visitor.cpp
├── Partha Kuchana - Software Architecture Design Patterns in Java (2004).pdf
├── README.md
├── SimplePatterns
├── Sve.vcxproj
├── Sve.vcxproj.filters
├── abstractfactory.cpp
├── abstractfactory.h
├── adapter.cpp
├── adapter.h
├── bridge.cpp
├── bridge.h
├── builder.cpp
├── builder.h
├── chainofresponsibility.cpp
├── chainofresponsibility.h
├── command.cpp
├── command.h
├── composite.cpp
├── composite.h
├── decorator.cpp
├── decorator.h
├── facade.cpp
├── facade.h
├── factorymethod.cpp
├── factorymethod.h
├── flyweight.cpp
├── flyweight.h
├── interpreter.cpp
├── interpreter.h
├── iterator.cpp
├── iterator.h
├── main.cpp
├── mediator.cpp
├── mediator.h
├── memento.cpp
├── memento.h
├── observer.cpp
├── observer.h
├── prototype.cpp
├── prototype.h
├── proxy.cpp
├── proxy.h
├── singleton.cpp
├── singleton.h
├── state.cpp
├── state.h
├── strategy.cpp
├── strategy.h
├── templatemethod.cpp
├── templatemethod.h
├── visitor.cpp
└── visitor.h
├── _config.yml
└── stl
├── algorithm.cpp
├── lista.cpp
├── mapa.cpp
├── queue.cpp
├── smart_pointers.cpp
├── stack.cpp
└── vector.cpp
/10_mediatormemento/mediator/ex1/Mediator/Colleague.h:
--------------------------------------------------------------------------------
1 | #ifndef __COLLEAGUE_H
2 | #define __COLLEAGUE_H
3 |
4 | #include "Mediator.h"
5 |
6 | /* interfejs kolega/ucesnika u komunikaciji
7 | poseduje metode za slanje Send(msg) i primanje Receive(msg) poruka
8 | poseduje i referencu na posrednika/mediatora koga koristi prilikom komunikacije
9 | sa ostalim ucesnicima */
10 | class Colleague {
11 | public:
12 | Colleague(Mediator* mediator): m_mediator(mediator) {}
13 | virtual ~Colleague() {}
14 | virtual void Send(const string& message) = 0;
15 | virtual void Receive(const string& message) = 0;
16 | protected:
17 | Mediator* m_mediator;
18 | };
19 |
20 | #endif // __COLLEAGUE_H
21 |
--------------------------------------------------------------------------------
/10_mediatormemento/mediator/ex1/Mediator/ConcreteColleague1.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETECOLLEAGUE1_H
2 | #define __CONCRETECOLLEAGUE1_H
3 |
4 | #include "Colleague.h"
5 |
6 | /* konkretan kolega
7 | implementira metod Send tako sto pozove metod SendMessage na posredniku/medijatoru
8 | implementira i metod Receive preko koga mu se dopremaju poruke (u nasem slucaju
9 | ce posrednik pomocu ovog metoda da mu prosledjuje poruke) */
10 | class ConcreteColleague1: public Colleague {
11 | public:
12 | ConcreteColleague1(Mediator* mediator): Colleague(mediator) {}
13 | virtual void Send(const string& message) {
14 | cout << "ConcreteColleague1.Send(" << message << ")" << endl;
15 | m_mediator->SendMessage(message, this);
16 | }
17 | virtual void Receive(const string& message) {
18 | cout << "ConcreteColleague1.Receive(" << message << ")" << endl;
19 | }
20 | };
21 |
22 | #endif // __CONCRETECOLLEAGUE1_H
23 |
--------------------------------------------------------------------------------
/10_mediatormemento/mediator/ex1/Mediator/ConcreteColleague2.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETECOLLEAGUE2_H
2 | #define __CONCRETECOLLEAGUE2_H
3 |
4 | #include "Colleague.h"
5 |
6 | /* konkretan kolega
7 | implementira metod Send tako sto pozove metod SendMessage na posredniku/medijatoru
8 | implementira i metod Receive preko koga mu se dopremaju poruke (u nasem slucaju
9 | ce posrednik pomocu ovog metoda da mu prosledjuje poruke) */
10 | class ConcreteColleague2: public Colleague {
11 | public:
12 | ConcreteColleague2(Mediator* mediator): Colleague(mediator) {}
13 | virtual void Send(const string& message) {
14 | cout << "ConcreteColleague2.Send(" << message << ")" << endl;
15 | m_mediator->SendMessage(message, this);
16 | }
17 | virtual void Receive(const string& message) {
18 | cout << "ConcreteColleague2.Receive(" << message << ")" << endl;
19 | }
20 | };
21 |
22 | #endif // __CONCRETECOLLEAGUE2_H
23 |
24 |
--------------------------------------------------------------------------------
/10_mediatormemento/mediator/ex1/Mediator/Mediator.cbp:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/10_mediatormemento/mediator/ex1/Mediator/Mediator.h:
--------------------------------------------------------------------------------
1 | #ifndef __MEDIATOR_H
2 | #define __MEDIATOR_H
3 |
4 | #include
5 | #include
6 |
7 | #include "Colleague.h"
8 |
9 | using namespace std;
10 |
11 | class Colleague;
12 |
13 | /* mediator / posrednik
14 | apstraktna klasa, nudi metode koji omogucavaju da korisnici, kolete / Colleague
15 | komuniciraju medjusobno,
16 | tako se broj medjusobnih veza za komunikaciju izmedju n ucesnika redukuje sa
17 | n * (n - 1) / 2 na samo n veza (veze izmedju konkretnih posrednika/mediatora i kolega/Collegaues)
18 | interfejs nudi jedan metod koji se koristi za slanje poruka SendMessage gde se kao parametri
19 | stavljaju poruka koju korisnik/kolega salje i sam posiljalac colleague
20 | ovaj metod SendMessage pozivaju kolege da bi poslali poruku drugim ucesnicima */
21 | class Mediator {
22 | public:
23 | virtual void SendMessage(const string& message, Colleague* colleague) = 0;
24 | };
25 | #endif // __MEDIATOR_H
26 |
--------------------------------------------------------------------------------
/10_mediatormemento/mediator/ex1/Mediator/MediatorMain.cpp:
--------------------------------------------------------------------------------
1 | #include "ConcreteMediator.h"
2 |
3 | /* kreiramo posrednika/mediatora
4 | dva ucesnika u komunikaciji kolegu1 i kolegu2
5 | nakon toga posredniku postavimo ucesnike komunikacije setColl1 i setColl2
6 | posle toga kolega1 posalje poruku, nakon toga kolega 2 i mozemo da vidimo
7 | rezultate komunikacije */
8 | int main() {
9 | ConcreteMediator* mediator = new ConcreteMediator();
10 | ConcreteColleague1* colleague1 = new ConcreteColleague1(mediator);
11 | ConcreteColleague2* colleague2 = new ConcreteColleague2(mediator);
12 |
13 | mediator->SetColleague1(colleague1);
14 | mediator->SetColleague2(colleague2);
15 |
16 | colleague1->Send("Pozdrav od kolege C1");
17 | colleague2->Send("Evo i ja se javljam, tvoj drugar C2");
18 |
19 | delete mediator;
20 | delete colleague1;
21 | delete colleague2;
22 |
23 | return 0;
24 | }
25 |
--------------------------------------------------------------------------------
/10_mediatormemento/memento/ex1/Memento/Caretaker.h:
--------------------------------------------------------------------------------
1 | #ifndef __CARETAKER_H
2 | #define __CARETAKER_H
3 |
4 | #include
5 | #include "Memento.h"
6 |
7 | using namespace std;
8 |
9 | /* cuvar stanja/ caretaker
10 | cuva listu kreiranih podsetnika/memento
11 | moguce je uzeti neki podsetnik iz istorije kreiranih podsetnika
12 | i na taj nacin vratiti stanje objekta unazad kroz istoriju,
13 | imati opciju undo */
14 | class Caretaker {
15 | public:
16 | virtual ~Caretaker() {
17 | for (vector::iterator it = m_memento.begin(); it != m_memento.end(); ++it) {
18 | delete *it;
19 | }
20 | }
21 | Memento* GetMemento(unsigned int index = 0) {
22 | if (index < m_memento.size()) return m_memento[m_memento.size() - index - 1];
23 | return NULL;
24 | }
25 | void AddMemento(Memento* memento) {
26 | m_memento.push_back(memento);
27 | }
28 | protected:
29 | vector m_memento;
30 | };
31 |
32 | #endif // __CARETAKER_H
33 |
--------------------------------------------------------------------------------
/10_mediatormemento/memento/ex1/Memento/Memento.cbp:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/10_mediatormemento/memento/ex1/Memento/Memento.depend:
--------------------------------------------------------------------------------
1 | # depslib dependency file v1.0
2 | 1450963983 source:c:\users\sidejan\google drive\oop2\vezbe_sredjene\10_mediator_memento\memento\ex1\memento\mementomain.cpp
3 | "Originator.h"
4 | "Caretaker.h"
5 |
6 | 1450963950 c:\users\sidejan\google drive\oop2\vezbe_sredjene\10_mediator_memento\memento\ex1\memento\originator.h
7 | "Memento.h"
8 |
9 | 1450963797 c:\users\sidejan\google drive\oop2\vezbe_sredjene\10_mediator_memento\memento\ex1\memento\memento.h
10 |
11 |
12 |
13 | 1450964014 c:\users\sidejan\google drive\oop2\vezbe_sredjene\10_mediator_memento\memento\ex1\memento\caretaker.h
14 |
15 | "Memento.h"
16 |
17 | 1450931686 source:d:\___predavanja\oop2\lekcije\10_mediator_memento\memento\ex1\memento\mementomain.cpp
18 | "Originator.h"
19 | "Caretaker.h"
20 |
21 | 1450931550 d:\___predavanja\oop2\lekcije\10_mediator_memento\memento\ex1\memento\originator.h
22 | "Memento.h"
23 |
24 | 1450931396 d:\___predavanja\oop2\lekcije\10_mediator_memento\memento\ex1\memento\memento.h
25 |
26 |
27 |
28 | 1450979283 d:\___predavanja\oop2\lekcije\10_mediator_memento\memento\ex1\memento\caretaker.h
29 |
30 | "Memento.h"
31 |
32 |
--------------------------------------------------------------------------------
/10_mediatormemento/memento/ex1/Memento/Memento.h:
--------------------------------------------------------------------------------
1 | #ifndef __MEMENTO_H
2 | #define __MEMENTO_H
3 |
4 | #include
5 | #include
6 |
7 | using namespace std;
8 | /* podsetnik/memento
9 | putem konstruktora postavljamo interno stanje objekta koje zelimo da sacuvamo
10 | metodom GetState mozemo da pristupimo tom internom stanju, sto bas i nije dobra praksa
11 | jer je tako to stanje izlozeno javno */
12 | class Memento {
13 | public:
14 | Memento(const string& state): m_state(state) {}
15 | string GetState() { return m_state; }
16 | protected:
17 | string m_state;
18 | };
19 |
20 | #endif // __MEMENTO_H
21 |
--------------------------------------------------------------------------------
/10_mediatormemento/memento/ex1/Memento/Memento.layout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/10_mediatormemento/memento/ex1/Memento/MementoMain.cpp:
--------------------------------------------------------------------------------
1 | #include "Originator.h"
2 | #include "Caretaker.h"
3 |
4 | /* kreiramo subjekat/originator koji ima svoje interno stanje
5 | i nudi operacije za promenu internog stanja (metod Do())
6 | nakon izvrsene neke promene u cuvaru podsetnika / caretaker
7 | dodamo novokreirani podsetnik subjekta, pozivajuci metod createMemento,
8 | zatim uradim jos neke operacije na subjektu a zatim vratimo neko od prethodnih
9 | stanja uzimajuci podsetnik iz cuvara podsetnika */
10 | int main() {
11 | Originator origin;
12 | Caretaker caretaker;
13 |
14 | origin.Do("Prva linija");
15 | caretaker.AddMemento(origin.CreateMemento());
16 | origin.Display();
17 |
18 | origin.Do("Druga linija");
19 | origin.Display();
20 |
21 | origin.SetMemento(caretaker.GetMemento(0));
22 | origin.Display();
23 |
24 | origin.Do("Treca linija");
25 | caretaker.AddMemento(origin.CreateMemento());
26 | origin.Display();
27 |
28 | return 0;
29 | }
30 |
--------------------------------------------------------------------------------
/10_mediatormemento/memento/ex1/Memento/Originator.h:
--------------------------------------------------------------------------------
1 | #ifndef __ORIGINATOR_H
2 |
3 | #include "Memento.h"
4 | /* originator/subjekat
5 | poseduje neko interno stanje koje ne zeli da izlaze spolja,
6 | kako bismo sacuvali interno stanje tokom evolucije objekta
7 | kreiramo memento/podsetnik, koristeci metod CreateMemento, koji ce da sacuva trenutno
8 | interno stanje objekta
9 | da bismo vratili stanje objekta na neko prethodno koristimo metod SetMemento
10 | koji koristeci prosledjeni memento/podsetnik postavi trenutno interno stanje
11 | objekta na ono koje je sacuvano u podsetniku/mementu */
12 | class Originator {
13 | public:
14 | Memento* CreateMemento() {
15 | return new Memento(m_state);
16 | }
17 | void SetMemento(Memento* m) {
18 | m_state = m->GetState();
19 | }
20 | void Do(string newState) { m_state = newState; }
21 | void Display() { cout << "[Originator] state = " << m_state << endl; }
22 | protected:
23 | string m_state;
24 | };
25 |
26 | #endif // __ORIGINATOR_H
27 |
--------------------------------------------------------------------------------
/10_mediatormemento/memento/ex2/Caretaker.h:
--------------------------------------------------------------------------------
1 | #ifndef __CARETAKER_H
2 | #define __CARETAKER_H
3 |
4 | #include
5 |
6 | using namespace std;
7 |
8 | class Originator;
9 | /* cuvar podsetnika */
10 | class Caretaker {
11 | public:
12 | virtual ~Caretaker() {
13 | for (vector::iterator it = m_memento.begin(); it != m_memento.end(); ++it) {
14 | delete *it;
15 | }
16 | }
17 | void RestoreState(unsigned int index) {
18 | if (index < m_memento.size()) m_memento[m_memento.size() - index - 1]->RestoreState();
19 | else throw("Undefined index");
20 | }
21 | void AddMemento(Originator::Memento* memento) {
22 | m_memento.push_back(memento);
23 | }
24 | protected:
25 | vector m_memento;
26 | };
27 |
28 | #endif // __CARETAKER_H
29 |
--------------------------------------------------------------------------------
/10_mediatormemento/memento/ex2/Memento.cbp:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/10_mediatormemento/memento/ex2/Memento.h:
--------------------------------------------------------------------------------
1 | #ifndef __MEMENTO_H
2 | #define __MEMENTO_H
3 |
4 | #include
5 | #include
6 |
7 | #include "Originator.h"
8 |
9 | using namespace std;
10 |
11 |
12 |
13 | #endif // __MEMENTO_H
14 |
--------------------------------------------------------------------------------
/10_mediatormemento/memento/ex2/Memento.layout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/10_mediatormemento/memento/ex2/MementoMain.cpp:
--------------------------------------------------------------------------------
1 | #include "Originator.h"
2 | #include "Caretaker.h"
3 |
4 | /* simulacija kao u prvom primeru */
5 | int main() {
6 | Originator origin;
7 | Caretaker caretaker;
8 |
9 | origin.Do("Prva linija");
10 | caretaker.AddMemento(origin.CreateMemento());
11 | origin.Display();
12 |
13 | origin.Do("Druga linija");
14 | origin.Display();
15 |
16 | caretaker.RestoreState(0);
17 | origin.Display();
18 |
19 | origin.Do("Treca linija");
20 |
21 | caretaker.AddMemento(origin.CreateMemento());
22 | origin.Display();
23 |
24 | return 0;
25 | }
26 |
--------------------------------------------------------------------------------
/10_mediatormemento/memento/ex2/Originator.h:
--------------------------------------------------------------------------------
1 | #ifndef __ORIGINATOR_H
2 |
3 | #include
4 | #include
5 |
6 | using namespace std;
7 | /* u ovom slucaju subjekt/originator
8 | ima klasu clanicu Memento/podsetnik
9 | u ovom slucaju ne izlazemo stanje sacuvano u podsetniku javno putem nekog metod,
10 | moguce je i prvi primer (ex1) izmeniti kako bi sledio taj princip */
11 | class Originator {
12 | public:
13 | class Memento {
14 | public:
15 | Memento(Originator* originator, const string& state): m_state(state), m_originator(originator) {}
16 | void RestoreState() { m_originator->m_state = m_state; }
17 | protected:
18 | string m_state;
19 | Originator* m_originator;
20 | };
21 | Memento* CreateMemento() {
22 | return new Memento(this, m_state);
23 | }
24 | void Do(string newState) { m_state = newState; }
25 | void Display() { cout << "[Originator] state = " << m_state << endl; }
26 | protected:
27 | string m_state;
28 | };
29 |
30 | #endif // __ORIGINATOR_H
31 |
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/Project1/Debug/Project1.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/11_observerstate/11_observerstate/observer/Project1/Debug/Project1.exe
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/Project1/Debug/Project1.ilk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/11_observerstate/11_observerstate/observer/Project1/Debug/Project1.ilk
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/Project1/Debug/Project1.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/11_observerstate/11_observerstate/observer/Project1/Debug/Project1.pdb
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/Project1.log:
--------------------------------------------------------------------------------
1 | Source.cpp
2 | Project1.vcxproj -> C:\Users\jaksa97\Desktop\OOP2 Primeri\11_observerstate\11_observerstate\observer\Project1\Debug\Project1.exe
3 |
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/Project1.tlog/CL.command.1.tlog:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/Project1.tlog/CL.command.1.tlog
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/Project1.tlog/CL.read.1.tlog:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/Project1.tlog/CL.read.1.tlog
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/Project1.tlog/CL.write.1.tlog:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/Project1.tlog/CL.write.1.tlog
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/Project1.tlog/Project1.lastbuildstate:
--------------------------------------------------------------------------------
1 | #TargetFrameworkVersion=v4.0:PlatformToolSet=v141:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=10.0.16299.0
2 | Debug|Win32|C:\Users\jaksa97\Desktop\OOP2 Primeri\11_observerstate\11_observerstate\observer\Project1\|
3 |
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/Project1.tlog/link.command.1.tlog:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/Project1.tlog/link.command.1.tlog
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/Project1.tlog/link.read.1.tlog:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/Project1.tlog/link.read.1.tlog
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/Project1.tlog/link.write.1.tlog:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/Project1.tlog/link.write.1.tlog
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/Source.obj:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/Source.obj
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/vc141.idb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/vc141.idb
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/vc141.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/11_observerstate/11_observerstate/observer/Project1/Project1/Debug/vc141.pdb
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/Project1/Project1/Project1.vcxproj.filters:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
7 |
8 |
9 | {93995380-89BD-4b04-88EB-625FBE52EBFB}
10 | h;hh;hpp;hxx;hm;inl;inc;xsd
11 |
12 |
13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
15 |
16 |
17 |
18 |
19 | Source Files
20 |
21 |
22 |
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/ex1/Observer/ConcreteObserver.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETEOBSERVER_H
2 | #define __CONCRETEOBSERVER_H
3 |
4 | #include
5 | #include
6 |
7 | #include "Observer.h"
8 |
9 | using namespace std;
10 |
11 | /* konkretan posmatrac
12 | metod Update je implementiran tako da prikaze da je izvrsen i sacuva
13 | interno stanje subjekta koje je najsvezije */
14 | class ConcreteObserver: public Observer {
15 | public:
16 | ConcreteObserver(): m_state("") {}
17 | virtual ~ConcreteObserver() {}
18 | virtual void Update(Subject* subject) {
19 | cout << "ConcreteObserver.Update(" << subject->GetState() << ")" << endl;
20 | m_state = subject->GetState();
21 | }
22 | protected:
23 | string m_state;
24 | };
25 |
26 | #endif // __CONCRETEOBSERVER_H
27 |
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/ex1/Observer/ConcreteSubject.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETESUBJECT_H
2 | #define __CONCRETESUBJECT_H
3 |
4 | #include
5 | #include
6 |
7 | #include "Subject.h"
8 |
9 | using namespace std;
10 | /* konkretan subjekt,
11 | implementira virtuelne metode
12 | u ovom slucaju SetState je implementiran tako da prilikom promene stanja
13 | ne poziva se automatski Notify na subjektu,
14 | vec je to zadatak korisnika konkretnog subjekta da nakon poziva SetState
15 | pozove Notify ako misli da je bitno da posmatraci budu obavesteni o dogadjaju */
16 | class ConcreteSubject: public Subject {
17 | public:
18 | ConcreteSubject() {}
19 | virtual ~ConcreteSubject() {}
20 | virtual string GetState() {
21 | return m_state;
22 | }
23 | virtual void SetState(const string& state) {
24 | cout << "ConcreteSubject.SetState(" << state << ")" << endl;
25 | m_state = state;
26 | }
27 | protected:
28 | string m_state;
29 | };
30 |
31 | #endif // __CONCRETESUBJECT_H
32 |
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/ex1/Observer/Observer.h:
--------------------------------------------------------------------------------
1 | #ifndef __OBSERVER_H
2 | #define __OBSERVER_H
3 |
4 | #include "Subject.h"
5 |
6 | class Subject;
7 | /* apstraktan posmatrac/observer
8 | poseduje metod Update(subjekt) preko koga subjekt kojem se desila promena od interesa
9 | moze da obavesti registrovanog posmatraca o dogadjaju */
10 | class Observer {
11 | public:
12 | Observer() {}
13 | virtual ~Observer() {}
14 | virtual void Update(Subject* subject) = 0;
15 | };
16 |
17 | #endif // __OBSERVER_H
18 |
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/ex1/Observer/Observer.layout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/ex1/Observer/ObserverMain.cpp:
--------------------------------------------------------------------------------
1 | #include "ConcreteSubject.h"
2 | #include "ConcreteObserver.h"
3 |
4 | /* kreiramo subjekta koji moze da trpi promene internog stanja i obavesti
5 | registrovane posmatrace o promeni
6 | kreiramo dva konkretna posmatraca, registrujemo ih kod subjekta
7 | promenimo stanje subjekta i pozovemo metod Notify spolja
8 | subjekt ce pri pozivu ovog metoda da pozove Update kod svih registrovanih posmatraca */
9 | int main() {
10 | Subject* subject = new ConcreteSubject();
11 | Observer* observer1 = new ConcreteObserver();
12 | Observer* observer2 = new ConcreteObserver();
13 |
14 | subject->Attach(observer1);
15 | subject->Attach(observer2);
16 |
17 | subject->SetState("Novo stanje A");
18 | subject->Notify();
19 |
20 | subject->Detach(observer1);
21 | subject->SetState("Novo stanje B");
22 | subject->Notify();
23 |
24 | delete subject;
25 | delete observer1;
26 | delete observer2;
27 | return 0;
28 | }
29 |
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/ex2/Aukcija.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/11_observerstate/11_observerstate/observer/ex2/Aukcija.exe
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/observer/ex2/Aukcija.o:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/11_observerstate/11_observerstate/observer/ex2/Aukcija.o
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/state/ex1/State/ConcreteStateA.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETESTATEA_H
2 | #define __CONCRETESTATEA_H
3 |
4 | #include
5 |
6 | #include "State.h"
7 |
8 | using namespace std;
9 |
10 | /* konkretno stanje / concrete state
11 | implementira metod handle koji konktekst zove prilikom razresavanja nekog
12 | zahteva */
13 | class ConcreteStateA: public State {
14 | public:
15 | ConcreteStateA() {}
16 | virtual ~ConcreteStateA() {}
17 | virtual void Handle() {
18 | cout << "ConcreteStateA.Handle()" << endl;
19 | }
20 | };
21 |
22 | #endif // __CONCRETESTATEA_H
23 |
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/state/ex1/State/ConcreteStateB.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETESTATEB_H
2 | #define __CONCRETESTATEB_H
3 |
4 | #include
5 |
6 | #include "State.h"
7 |
8 | using namespace std;
9 |
10 | /* konkretno stanje / concrete state
11 | implementira metod handle koji konktekst zove prilikom razresavanja nekog
12 | zahteva */
13 | class ConcreteStateB: public State {
14 | public:
15 | ConcreteStateB() {}
16 | virtual ~ConcreteStateB() {}
17 | virtual void Handle() {
18 | cout << "ConcreteStateB.Handle()" << endl;
19 | }
20 | };
21 |
22 | #endif // __CONCRETESTATEB_H
23 |
24 |
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/state/ex1/State/State.h:
--------------------------------------------------------------------------------
1 | #ifndef __STATE_H
2 | #define __STATE_H
3 |
4 | /* apstraktno stanje / state
5 | poseduje metod Handle koji kontekst zove da bi
6 | razresio neki zahtev konteksta,
7 | moguce je preko metoda Handle da prosledimo i referencu
8 | na kontekst koji je zatrazio razresenje nekog zahteva
9 | i da na taj nacin konkretno stanje moze da izvrsi
10 | odgovarajuce modifikacije pristupajuci konktekstu */
11 | class State {
12 | public:
13 | State() {}
14 | virtual ~State() { }
15 | virtual void Handle() = 0;
16 | };
17 |
18 | #endif // __STATE_H
19 |
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/state/ex1/State/State.layout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/state/ex1/State/StateMain.cpp:
--------------------------------------------------------------------------------
1 | #include "Context.h"
2 |
3 | /* kreiramo kontekst, u konstruktoru ce se postaviti neko pocetno konkretno
4 | stanje, kada zovnemo metod Request zahtev ce biti prosledjen putem metoda Handle
5 | na stanju, trenutnom konkretnom stanju da razresi taj zahtev,
6 | nakon toga promenimo stanje i opet razresimo neki zahtev,
7 | i mozemo da pratimo tok izvrsavanja */
8 | int main() {
9 | Context context;
10 |
11 | context.Request();
12 |
13 | context.ChangeState();
14 | context.Request();
15 |
16 | context.ChangeState();
17 | context.Request();
18 |
19 | return 0;
20 | }
21 |
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/state/ex1/State/bin/Debug/State.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/11_observerstate/11_observerstate/state/ex1/State/bin/Debug/State.exe
--------------------------------------------------------------------------------
/11_observerstate/11_observerstate/state/ex1/State/obj/Debug/StateMain.o:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/11_observerstate/11_observerstate/state/ex1/State/obj/Debug/StateMain.o
--------------------------------------------------------------------------------
/12_strategytemplate/strategy/ex1/Strategy/ConcreteStrategyA.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETESTRATEGYA_H
2 | #define __CONCRETESTRATEGYA_H
3 |
4 | #include "Strategy.h"
5 |
6 | /* konkretna strategija / concrete strategy
7 | daje implementaciju metoda AlgorithmInterface
8 | u nasem slucaju samo prikazujemo da je metod pozvan */
9 | class ConcreteStrategyA: public Strategy {
10 | public:
11 | virtual void AlgorithmInterface() {
12 | cout << "ConcreteStrategyA.AlgorithmInterface()" << endl;
13 | }
14 | };
15 |
16 | #endif // __CONCRETESTRATEGYA_H
17 |
--------------------------------------------------------------------------------
/12_strategytemplate/strategy/ex1/Strategy/ConcreteStrategyB.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETESTRATEGYB_H
2 | #define __CONCRETESTRATEGYB_H
3 |
4 | #include "Strategy.h"
5 |
6 | /* konkretna strategija / concrete strategy
7 | daje implementaciju metoda AlgorithmInterface
8 | u nasem slucaju samo prikazujemo da je metod pozvan */
9 | class ConcreteStrategyB: public Strategy {
10 | public:
11 | virtual void AlgorithmInterface() {
12 | cout << "ConcreteStrategyB.AlgorithmInterface()" << endl;
13 | }
14 | };
15 |
16 | #endif // __CONCRETESTRATEGYB_H
17 |
--------------------------------------------------------------------------------
/12_strategytemplate/strategy/ex1/Strategy/ConcreteStrategyC.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETESTRATEGYC_H
2 | #define __CONCRETESTRATEGYC_H
3 |
4 | #include "Strategy.h"
5 |
6 | /* konkretna strategija / concrete strategy
7 | daje implementaciju metoda AlgorithmInterface
8 | u nasem slucaju samo prikazujemo da je metod pozvan */
9 | class ConcreteStrategyC: public Strategy {
10 | public:
11 | virtual void AlgorithmInterface() {
12 | cout << "ConcreteStrategyC.AlgorithmInterface()" << endl;
13 | }
14 | };
15 |
16 | #endif // __CONCRETESTRATEGYC_H
17 |
18 |
--------------------------------------------------------------------------------
/12_strategytemplate/strategy/ex1/Strategy/Strategy.h:
--------------------------------------------------------------------------------
1 | #ifndef __STRATEGY_H
2 | #define __STRATEGY_H
3 |
4 | #include
5 |
6 | using namespace std;
7 |
8 | /* apstraktna strategija / strategy
9 | poseduje metod AlgorithmInterface kojim se resava neki problem
10 | razlicite konkretne strategije mogu da ponude sustinski razlicite
11 | implementacije ovog metoda,
12 | bilo u razlicitoj efikasnosti, bilo u razlicitim efektima koje
13 | taj metod moze da izazove na kontekstu */
14 | class Strategy {
15 | public:
16 | virtual void AlgorithmInterface() = 0;
17 | virtual ~Strategy() { }
18 | };
19 |
20 | #endif // __STRATEGY_H
21 |
--------------------------------------------------------------------------------
/12_strategytemplate/strategy/ex1/Strategy/StrategyMain.cpp:
--------------------------------------------------------------------------------
1 | #include "Context.h"
2 | #include "ConcreteStrategyA.h"
3 | #include "ConcreteStrategyB.h"
4 | #include "ConcreteStrategyC.h"
5 |
6 | /* kreiramo kontekst sa odredjenom konkretnom strategijom A
7 | zatim uputimo zahtev da nam razresi neki problem,
8 | zatim promenimo strategiju i opet uputimo zahtev
9 | tok izvrsavanja mozemo pratiti na ekranu */
10 | int main() {
11 | Context context(new ConcreteStrategyA());
12 | context.ContextInterface();
13 |
14 | context.SetStrategy(new ConcreteStrategyB());
15 | context.ContextInterface();
16 |
17 | context.SetStrategy(new ConcreteStrategyC());
18 | context.ContextInterface();
19 |
20 | return 0;
21 | }
22 |
--------------------------------------------------------------------------------
/12_strategytemplate/strategy/ex1/Strategy/bin/Debug/Strategy.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/12_strategytemplate/strategy/ex1/Strategy/bin/Debug/Strategy.exe
--------------------------------------------------------------------------------
/12_strategytemplate/strategy/ex1/Strategy/obj/Debug/StrategyMain.o:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/12_strategytemplate/strategy/ex1/Strategy/obj/Debug/StrategyMain.o
--------------------------------------------------------------------------------
/12_strategytemplate/template_method/ex1/TemplateMethod/AbstractClass.h:
--------------------------------------------------------------------------------
1 | #ifndef __ABSTRACTCLASS_H
2 | #define __ABSTRACTCLASS_H
3 |
4 | #include
5 |
6 | using namespace std;
7 |
8 | /* apstraktna klasa koja poseduje neki sablonski metod / template method
9 | u nasem slucaju to je TemplateMethod
10 | u apstraktnoj klasi data je implementacija ovog metoda koristeci virtuelne metode
11 | PrimitiveOperation1/2 koji nisu implementirani,
12 | izvedene klase od AbstractClass treba da daju implementacije metoda PrimitiveOperation1/2
13 | ali ne menjajuci korake u TemplateMethod,
14 | na taj nacin konkretne klase mogu da daju odgovarajuce izmene ovih primitivnih operacija,
15 | razlika u odnosu na strategija obrazac je sto kod sablon metoda mozemo da vrsimo
16 | izmenu finijih delova implementacije, dok kod strategije kod konkretnih strategija
17 | moramo da dajemo implementacije celog metoda */
18 | class AbstractClass {
19 | public:
20 | virtual void TemplateMethod() {
21 | cout << "AbstractClass.TemplateMethod()" << endl;
22 | PrimitiveOperation1();
23 | PrimitiveOperation2();
24 | }
25 | virtual void PrimitiveOperation1() = 0;
26 | virtual void PrimitiveOperation2() = 0;
27 | };
28 | #endif // __ABSTRACTCLASS_H
29 |
--------------------------------------------------------------------------------
/12_strategytemplate/template_method/ex1/TemplateMethod/ConcreteClass.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETECLASS_H
2 | #define __CONCRETECLASS_H
3 |
4 | #include
5 | #include "AbstractClass.h"
6 |
7 | using namespace std;
8 |
9 | /* konkretna klasa koja implementira operacije koriscenje u sablon metodu / template method
10 | iz apstraktne klase koju nasledjuje,
11 | taj metod se ne menja u konkretnoj klasi */
12 | class ConcreteClass: public AbstractClass {
13 | public:
14 | virtual void PrimitiveOperation1() {
15 | cout << "ConcreteClass.PrimitiveOperation1()" << endl;
16 | }
17 | virtual void PrimitiveOperation2() {
18 | cout << "ConcreteClass.PrimitiveOperation2()" << endl;
19 | }
20 | };
21 | #endif // __CONCRETECLASS_H
22 |
--------------------------------------------------------------------------------
/12_strategytemplate/template_method/ex1/TemplateMethod/TemplateMethod.cbp:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/12_strategytemplate/template_method/ex1/TemplateMethod/TemplateMethod.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include "ConcreteClass.h"
3 |
4 | /* kreiramo instancu konkretne klase i pozovemo sablon metod/ TemplateMethod */
5 | int main() {
6 | unique_ptr c(new ConcreteClass());
7 | c->TemplateMethod();
8 |
9 | return 0;
10 | }
11 |
--------------------------------------------------------------------------------
/12_strategytemplate/template_method/ex1/TemplateMethod/TemplateMethod.depend:
--------------------------------------------------------------------------------
1 | # depslib dependency file v1.0
2 | 1452784060 source:c:\users\sidejan\google drive\oop2\vezbe_sredjene\12_strategy_template\template_method\ex1\templatemethod\templatemethod.cpp
3 |
4 | "ConcreteClass.h"
5 |
6 | 1452784090 c:\users\sidejan\google drive\oop2\vezbe_sredjene\12_strategy_template\template_method\ex1\templatemethod\concreteclass.h
7 |
8 | "AbstractClass.h"
9 |
10 | 1452784093 c:\users\sidejan\google drive\oop2\vezbe_sredjene\12_strategy_template\template_method\ex1\templatemethod\abstractclass.h
11 |
12 |
13 | 1452784062 source:d:\___predavanja\oop2\lekcije\12_strategy_template\template_method\ex1\templatemethod\templatemethod.cpp
14 |
15 | "ConcreteClass.h"
16 |
17 | 1452784092 d:\___predavanja\oop2\lekcije\12_strategy_template\template_method\ex1\templatemethod\concreteclass.h
18 |
19 | "AbstractClass.h"
20 |
21 | 1452784094 d:\___predavanja\oop2\lekcije\12_strategy_template\template_method\ex1\templatemethod\abstractclass.h
22 |
23 |
24 |
--------------------------------------------------------------------------------
/12_strategytemplate/template_method/ex1/TemplateMethod/TemplateMethod.layout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/12_strategytemplate/template_method/ex1/TemplateMethod/bin/Debug/TemplateMethod.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/12_strategytemplate/template_method/ex1/TemplateMethod/bin/Debug/TemplateMethod.exe
--------------------------------------------------------------------------------
/12_strategytemplate/template_method/ex1/TemplateMethod/obj/Debug/TemplateMethod.o:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/12_strategytemplate/template_method/ex1/TemplateMethod/obj/Debug/TemplateMethod.o
--------------------------------------------------------------------------------
/13_visitor/ex1/Visitor/ConcreteElementA.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETEELEMENTA_H
2 | #define __CONCRETEELEMENTA_H
3 |
4 | #include
5 | using namespace std;
6 |
7 | #include "Element.h"
8 |
9 | /* konkretan element A
10 | nove operacije ovoj klasi dodane su koriscenjem konkretnih posetilaca
11 | mora da implementira nasledjeni metod Accept gde na prosledjenom
12 | posetiocu pozove metod koji tretira instance ove konkretne klase
13 | preko metoda Accept se prosledjuje ta nova operacija koja ce biti izvrsena
14 | na konkretnim elementima, a koja je predstavljena u obliku prosledjenog
15 | konkretnog posetioca/visitora */
16 | class ConcreteElementA: public Element {
17 | public:
18 | virtual ~ConcreteElementA() {}
19 | virtual void Accept(Visitor& visitor) {
20 | cout << "ConcreteElementA.Accept()" << endl;
21 | visitor.VisitConcreteElementA(*this);
22 | }
23 | virtual void OperationA() {
24 | cout << "ConcreteElementA.OperationA()" << endl;
25 | }
26 | };
27 |
28 | #endif // __CONCRETEELEMENTA_H
29 |
--------------------------------------------------------------------------------
/13_visitor/ex1/Visitor/ConcreteElementB.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETEELEMENTB_H
2 | #define __CONCRETEELEMENTB_H
3 |
4 | #include
5 | using namespace std;
6 |
7 | #include "Element.h"
8 |
9 | /* konkretan element B
10 | nove operacije ovoj klasi dodane su koriscenjem konkretnih posetilaca
11 | mora da implementira nasledjeni metod Accept gde na prosledjenom
12 | posetiocu pozove metod koji tretira instance ove konkretne klase
13 | preko metoda Accept se prosledjuje ta nova operacija koja ce biti izvrsena
14 | na konkretnim elementima, a koja je predstavljena u obliku prosledjenog
15 | konkretnog posetioca/visitora */
16 | class ConcreteElementB: public Element {
17 | public:
18 | virtual ~ConcreteElementB() {}
19 | virtual void Accept(Visitor& visitor) {
20 | cout << "ConcreteElementB.Accept()" << endl;
21 | visitor.VisitConcreteElementB(*this);
22 | }
23 | virtual void OperationB() {
24 | cout << "ConcreteElementB.OperationB()" << endl;
25 | }
26 | };
27 |
28 | #endif // __CONCRETEELEMENTB_H
29 |
30 |
--------------------------------------------------------------------------------
/13_visitor/ex1/Visitor/ConcreteVisitor2.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETEVISITOR2_H
2 | #define __CONCRETEVISITOR2_H
3 |
4 | #include
5 | using namespace std;
6 |
7 | #include "ConcreteElementA.h"
8 | #include "ConcreteElementB.h"
9 |
10 | /* konkretan posetioc / concrete visitor
11 | za razliku od konkretnog posetioca 1 ovde se pozivaju neke
12 | operacije na instancama konkretnih klasa */
13 | class ConcreteVisitor2: public Visitor {
14 | public:
15 | virtual ~ConcreteVisitor2() {}
16 | virtual void VisitConcreteElementA(ConcreteElementA& element) {
17 | cout << "ConcreteVisitor2.VisitConcreteElementA()" << endl;
18 | element.OperationA();
19 | }
20 | virtual void VisitConcreteElementB(ConcreteElementB& element) {
21 | cout << "ConcreteVisitor2.VisitConcreteElementB()" << endl;
22 | element.OperationB();
23 | }
24 | };
25 |
26 | #endif // __CONCRETEVISITOR1_H
27 |
--------------------------------------------------------------------------------
/13_visitor/ex1/Visitor/Element.h:
--------------------------------------------------------------------------------
1 | #ifndef __ELEMENT_H
2 | #define __ELEMENT_H
3 |
4 | #include "Visitor.h"
5 |
6 | /* apstraktni element
7 | nudi metod Accept koji ce da nasledjuju svi konkretni elementi
8 | a putem kojeg se prosledjuju posetioci */
9 | class Element {
10 | public:
11 | virtual ~Element() {}
12 | virtual void Accept(Visitor& visitor) = 0;
13 | };
14 |
15 | #endif // __ELEMENT_H
16 |
--------------------------------------------------------------------------------
/13_visitor/ex1/Visitor/ObjectStructure.h:
--------------------------------------------------------------------------------
1 | #ifndef __OBJECTSTRUCTURE_H
2 | #define __OBJECTSTRUCTURE_H
3 |
4 | #include
5 | #include
6 | using namespace std;
7 |
8 | #include "Element.h"
9 |
10 | /* objektna struktura / kompozicija
11 | moze da se sastoji od vise elemenata i moguce je
12 | pozvati novu operaciju na svim elementima strukture prosledjujuci
13 | posetioca/visitora putem metoda Accept koji kasnije
14 | prosledi posetioca svim elementima strukture */
15 | class ObjectStructure {
16 | public:
17 | typedef vector::iterator ElementIter;
18 |
19 | virtual ~ObjectStructure() {
20 | for (ElementIter it = m_elements.begin(); it != m_elements.end(); ++it) {
21 | delete *it;
22 | }
23 | m_elements.clear();
24 | }
25 | virtual void Accept(Visitor& visitor) {
26 | cout << "ObjectStructure.Accept()" << endl;
27 | for (ElementIter it = m_elements.begin(); it != m_elements.end(); ++it) {
28 | (*it)->Accept(visitor);
29 | }
30 | }
31 | virtual void AddElement(Element* element) {
32 | m_elements.push_back(element);
33 | }
34 | protected:
35 | vector m_elements;
36 | };
37 | #endif // __OBJECTSTRUCTURE_H
38 |
--------------------------------------------------------------------------------
/13_visitor/ex1/Visitor/Visitor.h:
--------------------------------------------------------------------------------
1 | #ifndef __VISITOR_H
2 | #define __VISITOR_H
3 |
4 | class ConcreteElementA;
5 | class ConcreteElementB;
6 |
7 | /* apstraktni posetilac / visitor
8 | nudi virtuelne metode da "poseti" konkretne elemente A i B,
9 | u sustini ti metodi, implementirani kasnije u konkrentim posetiocima,
10 | ne vrse nikakvo "posecivanje" tih konkretnih elemenata, vec im
11 | daju nove operacije,
12 | umesto da nove operacije budu dodane u hijerarhije elemenata koje nasledjuju
13 | apstraktnu klasu element i implementirane u svakoj nasledjenoj klasi
14 | mi nove operacije toj hijerarhiji mozemo ovako spolja/eksterno da dodelimo
15 | koristeci obrazac posetioc/visitor
16 | svaka ta nova operacije je koncepcijski objedinjena u jednom konkretnom posetiocu
17 | ovaj obrazac je koristan kada je hijerarhija objekata/elemenata stabila i nema
18 | prosirivanja a imamo slucaj da se cesto dodaju nove operacije
19 | kada se dodaje novi element u hijerarhiju klasa onda svi posetioci moraju da
20 | implementiraju novi metod za taj prirodani konkretan element */
21 | class Visitor {
22 | public:
23 | virtual ~Visitor() {}
24 | virtual void VisitConcreteElementA(ConcreteElementA& element) = 0;
25 | virtual void VisitConcreteElementB(ConcreteElementB& element) = 0;
26 | };
27 |
28 | #endif // __VISITOR_H
29 |
--------------------------------------------------------------------------------
/13_visitor/ex1/Visitor/VisitorMain.cpp:
--------------------------------------------------------------------------------
1 | #include "ConcreteVisitor1.h"
2 | #include "ConcreteVisitor2.h"
3 | #include "ObjectStructure.h"
4 |
5 | /* kreiramo strukturu elemenata, dodamo joj dva konkretna elementa,
6 | kreiramo dva razlicita konkretna posetioca i prosledimo ih strukturi
7 | na ekranu ce biti odstampan tok izvrsavanja */
8 | int main() {
9 | ObjectStructure structure;
10 | structure.AddElement(new ConcreteElementA());
11 | structure.AddElement(new ConcreteElementB());
12 |
13 | Visitor* v1 = new ConcreteVisitor1();
14 | Visitor* v2 = new ConcreteVisitor2();
15 |
16 | structure.Accept(*v1);
17 | structure.Accept(*v2);
18 |
19 | delete v1;
20 | delete v2;
21 |
22 | return 0;
23 | }
24 |
--------------------------------------------------------------------------------
/1_streams/imenik1.txt:
--------------------------------------------------------------------------------
1 | ime1 prezime1 , 0123/12312312-12312
2 | ime2 prezime1 , 0123/12312312-12312 ime5 prezime1 , 0123/12312312-12312 ime7 prezime1 , 0123/12312312-12312
3 | ime3 prezime1 , 0123/12312312-12312 ime6 prezime1 , 0123/12312312-12312
4 | ime4 prezime1 , 0123/12312312-12312
5 |
--------------------------------------------------------------------------------
/1_streams/imenik2.txt:
--------------------------------------------------------------------------------
1 | bime1 prezime1 , 0123/12312312-12312
2 | bime2 prezime1 , 0123/12312312-12312 bime5 prezime1 , 0123/12312312-12312 bime7 prezime1 , 0123/12312312-12312
3 | bime3 prezime1 , 0123/12312312-12312 bime6 prezime1 , 0123/12312312-12312
4 | bime4 prezime1 , 0123/12312312-12312
5 |
--------------------------------------------------------------------------------
/1_streams/imenik3.txt:
--------------------------------------------------------------------------------
1 | aime1 prezime1 , 0123/12312312-12312
2 | aime2 prezime1 , 0123/12312312-12312 aime5 prezime1 , 0123/12312312-12312 aime7 prezime1 , 0123/12312312-12312
3 | aime3 prezime1 , 0123/12312312-12312 aime6 prezime1 , 0123/12312312-12312
4 | aime4 prezime1 , 0123/12312312-12312
5 |
--------------------------------------------------------------------------------
/1_streams/matrica.cpp:
--------------------------------------------------------------------------------
1 | /*
2 | UNOS: dimenzije n, m
3 | UCITAJE SE MATRICA n x m
4 | U IZLAZU SE STAMPA MATRICA GDE SVAKO POLJE MATRICE SE STAMPA NA 3 DECIMALE SA 8 MESTA ZA STAMPU
5 | PRIMER
6 | ULAZ
7 | 2 2 1.234567 0.123456 0.234567 5.1234567
8 | IZLAZ
9 | 1.234 0.123
10 | 0.234 5.123
11 |
12 | cout << fixed << setw(8) << setprecision(3)
13 | U DATOM RESENJU KORISTI SE I ZNAK '.' ZA POPUNJAVANJE PRAZNINA
14 | */
15 |
16 | #include
17 | #include
18 |
19 | using namespace std;
20 |
21 | int main() {
22 | int nr, nc;
23 | cin >> nr >> nc;
24 | float a [nr] [nc];
25 | for (int r = 0; r < nr; r ++) {
26 | for (int c = 0; c < nc; c ++) cin >> a [r] [c];
27 | }
28 | for (int r = 0; r < nr; r ++) {
29 | for (int c = 0; c < nc; c ++) {
30 | cout.fill('.');
31 | cout << fixed << setw(8) << setprecision(3) << a [r] [c];
32 | }
33 | cout << endl;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/1_streams/stringstream_primer.cpp:
--------------------------------------------------------------------------------
1 | /*
2 | IZ FILE-A SE UCITAVAJU REDOVI KARAKTERA
3 | NA PRIMER (ulaz.txt)
4 | 1 , 2 , 33, 55, 66
5 | , 53 34, 43 53, 66, 22
6 |
7 | UCITAVATI U NEKU STRINGU SA GETLINE SA ',' DO EOF
8 | A ONDA KORISTECI ISTRINGSTREAM IZ TOGA IZVUCI BROJEVE
9 | I UPISATI IH U OSTRINGSTREAM
10 | I NA KRAJU STAMPATI SADRZAJ OSTRINGSTREAM OBJEKTA
11 | U FILE izlaz.txt
12 |
13 | NAPOMENA: ovo nije uradjeno na bas optimalan nacin vec vise sluzi kao
14 | primer primene naucenog
15 | */
16 |
17 | #include
18 | #include
19 | #include
20 | #include
21 | #include
22 |
23 | using namespace std;
24 |
25 | int main() {
26 | ifstream in("ulaz.txt");
27 | if (!in.is_open()) {
28 | cout << "Greska prilikom otvaranja file-a ulaz.txt" << endl;
29 | exit(1);
30 | }
31 | string line, all = "";
32 | while (!in.eof()) {
33 | getline(in, line, ',');
34 | all += " " + line;
35 | }
36 | istringstream ins(all);
37 | ostringstream outs;
38 | int tmp;
39 | while (ins >> tmp) {
40 | outs << tmp << ' ';
41 | }
42 | cout << "Pisem rezultate u izlazni file izlaz.txt" << endl;
43 | ofstream out("izlaz.txt");
44 | out << outs.str() << endl;
45 | out.close();
46 | in.close();
47 | }
48 |
--------------------------------------------------------------------------------
/1_streams/test1.txt:
--------------------------------------------------------------------------------
1 | 9 23094 2390 209 40293
2 | 2 394 203 023 023
3 | 2 309 4023 023 042
4 | 2 304 230
5 |
--------------------------------------------------------------------------------
/1_streams/test2.txt:
--------------------------------------------------------------------------------
1 | 9 23094 2390 209 40293
2 | 2 394 203 023 023
3 | 2 309 4023 023 042
4 | 2 304 230
5 |
--------------------------------------------------------------------------------
/1_streams/ulaz.txt:
--------------------------------------------------------------------------------
1 | 1 , 2 , 33, 55, 66
2 | , 53 34, 43 53, 66, 22
3 |
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/AbstractFactory.h:
--------------------------------------------------------------------------------
1 | #ifndef __ABSTRACT_FACTORY_H
2 | #define __ABSTRACT_FACTORY_H
3 |
4 | #include "AbstractProductA.h"
5 | #include "AbstractProductB.h"
6 |
7 | class AbstractFactory {
8 | public:
9 | virtual AbstractProductA* createProductA() = 0;
10 | virtual AbstractProductB* createProductB() = 0;
11 | };
12 | #endif // __ABSTRACT_FACTORY_H
13 |
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/AbstractFactoryMain.cpp:
--------------------------------------------------------------------------------
1 | #include "ConcreteFactory1.h"
2 | #include "ConcreteFactory2.h"
3 |
4 | int main() {
5 | AbstractFactory* factory1 = new ConcreteFactory1();
6 | AbstractProductA* productA1 = factory1->createProductA();
7 | AbstractProductB* productB1 = factory1->createProductB();
8 | productA1->use();
9 | productB1->use();
10 |
11 | AbstractFactory* factory2 = new ConcreteFactory2();
12 | AbstractProductA* productA2 = factory2->createProductA();
13 | AbstractProductB* productB2 = factory2->createProductB();
14 | productA2->use();
15 | productB2->use();
16 |
17 |
18 | return 0;
19 | }
20 |
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/AbstractProductA.h:
--------------------------------------------------------------------------------
1 | #ifndef __ABSTRACT_PRODUCTA_H
2 | #define __ABSTRACT_PRODUCTA_H
3 |
4 | class AbstractProductA {
5 | public:
6 | virtual void use() = 0;
7 | };
8 | #endif // __ABSTRACT_PRODUCTA_H
9 |
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/AbstractProductB.h:
--------------------------------------------------------------------------------
1 | #ifndef __ABSTRACT_PRODUCTB_H
2 | #define __ABSTRACT_PRODUCTB_H
3 |
4 | class AbstractProductB {
5 | public:
6 | virtual void use() = 0;
7 | };
8 | #endif // __ABSTRACT_PRODUCTB_H
9 |
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/ConcreteFactory1.cpp:
--------------------------------------------------------------------------------
1 | #include "ConcreteFactory1.h"
2 | #include "ConcreteProductA1.h"
3 | #include "ConcreteProductB1.h"
4 |
5 | AbstractProductA* ConcreteFactory1::createProductA() {
6 | return new ConcreteProductA1();
7 | }
8 |
9 | AbstractProductB* ConcreteFactory1::createProductB() {
10 | return new ConcreteProductB1();
11 | }
12 |
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/ConcreteFactory1.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETE_FACTORY1_H
2 | #define __CONCRETE_FACTORY1_H
3 |
4 | #include "AbstractFactory.h"
5 |
6 | class ConcreteFactory1: public AbstractFactory {
7 | public:
8 | AbstractProductA* createProductA();
9 | AbstractProductB* createProductB();
10 | };
11 | #endif // __CONCRETE_FACTORY1_H
12 |
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/ConcreteFactory2.cpp:
--------------------------------------------------------------------------------
1 | #include "ConcreteFactory2.h"
2 | #include "ConcreteProductA2.h"
3 | #include "ConcreteProductB2.h"
4 |
5 | AbstractProductA* ConcreteFactory2::createProductA() {
6 | return new ConcreteProductA2();
7 | }
8 |
9 | AbstractProductB* ConcreteFactory2::createProductB() {
10 | return new ConcreteProductB2();
11 | }
12 |
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/ConcreteFactory2.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETE_FACTORY2_H
2 | #define __CONCRETE_FACTORY2_H
3 |
4 | #include "AbstractFactory.h"
5 |
6 | class ConcreteFactory2: public AbstractFactory {
7 | public:
8 | AbstractProductA* createProductA();
9 | AbstractProductB* createProductB();
10 | };
11 | #endif // __CONCRETE_FACTORY2_H
12 |
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/ConcreteProductA1.cpp:
--------------------------------------------------------------------------------
1 | #include "ConcreteProductA1.h"
2 |
3 | #include
4 |
5 | using namespace std;
6 |
7 | void ConcreteProductA1::use() {
8 | cout << "Koristim proizvod A1" << endl;
9 | }
10 |
11 |
12 |
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/ConcreteProductA1.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETE_PRODUCTA1_H
2 | #define __CONCRETE_PRODUCTA1_H
3 |
4 | #include "AbstractProductA.h"
5 |
6 | class ConcreteProductA1: public AbstractProductA {
7 | public:
8 | void use();
9 | };
10 | #endif // __CONCRETE_PRODUCTA1_H
11 |
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/ConcreteProductA2.cpp:
--------------------------------------------------------------------------------
1 | #include "ConcreteProductA2.h"
2 |
3 | #include
4 |
5 | using namespace std;
6 |
7 | void ConcreteProductA2::use() {
8 | cout << "Koristim proizvod A2" << endl;
9 | }
10 |
11 |
12 |
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/ConcreteProductA2.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETE_PRODUCTA2_H
2 | #define __CONCRETE_PRODUCTA2_H
3 |
4 | #include "AbstractProductA.h"
5 |
6 | class ConcreteProductA2: public AbstractProductA {
7 | public:
8 | void use();
9 | };
10 | #endif // __CONCRETE_PRODUCTA2_H
11 |
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/ConcreteProductB1.cpp:
--------------------------------------------------------------------------------
1 | #include "ConcreteProductB1.h"
2 |
3 | #include
4 |
5 | using namespace std;
6 |
7 | void ConcreteProductB1::use() {
8 | cout << "Koristim proizvod B1" << endl;
9 | }
10 |
11 |
12 |
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/ConcreteProductB1.h:
--------------------------------------------------------------------------------
1 | #include "AbstractProductB.h"
2 |
3 | class ConcreteProductB1: public AbstractProductB {
4 | public:
5 | void use();
6 | };
7 |
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/ConcreteProductB2.cpp:
--------------------------------------------------------------------------------
1 | #include "ConcreteProductB2.h"
2 |
3 | #include
4 |
5 | using namespace std;
6 |
7 | void ConcreteProductB2::use() {
8 | cout << "Koristim proizvod B2" << endl;
9 | }
10 |
11 |
12 |
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/ConcreteProductB2.h:
--------------------------------------------------------------------------------
1 | #include "AbstractProductB.h"
2 |
3 | class ConcreteProductB2: public AbstractProductB {
4 | public:
5 | void use();
6 | };
7 |
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/bin/Debug/AbstractFactory.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/bin/Debug/AbstractFactory.exe
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/obj/Debug/AbstractFactoryMain.o:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/obj/Debug/AbstractFactoryMain.o
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/obj/Debug/ConcreteFactory1.o:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/obj/Debug/ConcreteFactory1.o
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/obj/Debug/ConcreteFactory2.o:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/obj/Debug/ConcreteFactory2.o
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/obj/Debug/ConcreteProductA1.o:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/obj/Debug/ConcreteProductA1.o
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/obj/Debug/ConcreteProductA2.o:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/obj/Debug/ConcreteProductA2.o
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/obj/Debug/ConcreteProductB1.o:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/obj/Debug/ConcreteProductB1.o
--------------------------------------------------------------------------------
/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/obj/Debug/ConcreteProductB2.o:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/2_abstractbuilder/abstract_factory/ex1/AbstractFactory/obj/Debug/ConcreteProductB2.o
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex1/Builder/Builder.cbp:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex1/Builder/Builder.depend:
--------------------------------------------------------------------------------
1 | # depslib dependency file v1.0
2 | 1447247379 source:e:\predavanja\oop2\postavljenje_lekcije\2_abstract_builder\builder\ex0\builder\buildermain.cpp
3 | "Director.h"
4 | "ConcreteBuilder.h"
5 |
6 | 1447247339 e:\predavanja\oop2\postavljenje_lekcije\2_abstract_builder\builder\ex0\builder\director.h
7 | "Builder.h"
8 | "Product.h"
9 |
10 | 1447247279 e:\predavanja\oop2\postavljenje_lekcije\2_abstract_builder\builder\ex0\builder\builder.h
11 | "Product.h"
12 |
13 | 1447247321 e:\predavanja\oop2\postavljenje_lekcije\2_abstract_builder\builder\ex0\builder\product.h
14 |
15 |
16 | 1447247414 e:\predavanja\oop2\postavljenje_lekcije\2_abstract_builder\builder\ex0\builder\concretebuilder.h
17 |
18 |
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex1/Builder/Builder.h:
--------------------------------------------------------------------------------
1 | #ifndef __BUILDER_H
2 | #define __BUILDER_H
3 |
4 | #include "Product.h"
5 |
6 | /* apstraktan graditelj / abstract builder */
7 | class Builder {
8 | public:
9 | virtual void buildPart() = 0;
10 | virtual Product* getProduct() = 0;
11 | };
12 | #endif // __BUILDER_H
13 |
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex1/Builder/Builder.layout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex1/Builder/BuilderMain.cpp:
--------------------------------------------------------------------------------
1 | #include "Director.h"
2 | #include "ConcreteBuilder.h"
3 |
4 | /* koriscenje sablona, kreiramo konkretnog graditelja (concrete builder), prosledimo ga upravljacu (director)
5 | pomocu kojeg kreiramo prouzvod */
6 | int main() {
7 | Builder *builder = new ConcreteBuilder();
8 | Director *director = new Director(builder);
9 | Product *product = director->construct();
10 | product->use();
11 |
12 | delete builder;
13 | delete director;
14 | delete product;
15 |
16 | return 0;
17 | }
18 |
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex1/Builder/ConcreteBuilder.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETE_BUILDER_H
2 | #define __CONCRETE_BUILDER_H
3 |
4 | /* konkretan graditelj / concrete builder, ima mogucnost da konstruise proizvod deo po deo */
5 | class ConcreteBuilder: public Builder {
6 | private:
7 | Product *product;
8 | public:
9 | ConcreteBuilder() {
10 | product = new Product();
11 | }
12 | void buildPart() {
13 | product->setPart(5);
14 | }
15 | Product *getProduct() {
16 | return product;
17 | }
18 | };
19 | #endif // __CONCRETE_BUILDER_H
20 |
21 |
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex1/Builder/Director.h:
--------------------------------------------------------------------------------
1 | #ifndef __DIRECTOR_H
2 | #define __DIRECTOR_H
3 |
4 | #include "Builder.h"
5 | #include "Product.h"
6 |
7 | /* upravljac / director koji koristi graditelja (builder) da napravi proizvod postavljajuci deo po deo */
8 | class Director {
9 | private:
10 | Builder *builder;
11 | public:
12 | Director(Builder *builder) {
13 | this->builder = builder;
14 | }
15 | Product* construct() {
16 | builder->buildPart();
17 | return builder->getProduct();
18 | }
19 | };
20 |
21 | #endif // __DIRECTOR_H
22 |
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex1/Builder/Product.h:
--------------------------------------------------------------------------------
1 | #ifndef __PRODUCT_H
2 | #define __PRODUCT_H
3 |
4 | #include
5 |
6 | using namespace std;
7 |
8 | /* konkretan proizvod */
9 | class Product {
10 | private:
11 | int part;
12 | public:
13 | void setPart(int part) { this->part = part; }
14 | void use() { cout << "Koristim Proizvod koji ima deo #" << part << endl ; }
15 | };
16 | #endif // __PRODUCT_H
17 |
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex1/Builder/bin/Debug/Builder.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/2_abstractbuilder/builder/ex1/Builder/bin/Debug/Builder.exe
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex1/Builder/obj/Debug/BuilderMain.o:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/2_abstractbuilder/builder/ex1/Builder/obj/Debug/BuilderMain.o
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex2/GraditeljProizvoda/Graditelj.h:
--------------------------------------------------------------------------------
1 | #ifndef __GRADITELJ_H
2 | #define __GRADITELJ_H
3 |
4 | #include "Proizvod.h"
5 |
6 | /* graditelj / builder proizvoda */
7 | class Graditelj {
8 | private:
9 | Proizvod proizvod;
10 | public:
11 | static const int DEFAULT_INT_SVOJSTVO = 5;
12 | static const float DEFAULT_FLOAT_SVOJSTVO = 1.4141f;
13 | static const char DEFAULT_CHAR_SVOJSTVO = 'X';
14 |
15 | Graditelj() {
16 | proizvod = Proizvod(DEFAULT_INT_SVOJSTVO,DEFAULT_FLOAT_SVOJSTVO,DEFAULT_CHAR_SVOJSTVO);
17 | }
18 |
19 | Graditelj& postaviIntSvojstvo(const int intSvojstvo) {
20 | proizvod.postaviIntSvojstvo(intSvojstvo);
21 | return *this;
22 | }
23 | Graditelj& postaviFloatSvojstvo(const float floatSvojstvo) {
24 | proizvod.postaviFloatSvojstvo(floatSvojstvo);
25 | return *this;
26 | }
27 | Graditelj& postaviCharSvojstvo(const char charSvojstvo) {
28 | proizvod.postaviCharSvojstvo(charSvojstvo);
29 | return *this;
30 | }
31 |
32 | Graditelj& postaviProizvod() {
33 | proizvod = Proizvod(11, 0.12345, 'Y');
34 | return *this;
35 | }
36 |
37 | Proizvod napraviProizvod() {
38 | return proizvod;
39 | }
40 | };
41 |
42 | #endif // __GRADITELJ_H
43 |
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex2/GraditeljProizvoda/GraditeljProizvoda.cbp:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex2/GraditeljProizvoda/GraditeljProizvoda.depend:
--------------------------------------------------------------------------------
1 | # depslib dependency file v1.0
2 | 1447254723 source:e:\predavanja\oop2\postavljenje_lekcije\2_abstract_builder\builder\ex1\graditeljproizvoda\proizvod.cpp
3 | "Proizvod.h"
4 |
5 |
6 | 1447255290 e:\predavanja\oop2\postavljenje_lekcije\2_abstract_builder\builder\ex1\graditeljproizvoda\proizvod.h
7 |
8 | 1447254924 source:e:\predavanja\oop2\postavljenje_lekcije\2_abstract_builder\builder\ex1\graditeljproizvoda\proizvodmain.cpp
9 | "Proizvod.h"
10 | "Graditelj.h"
11 |
12 | 1447255366 e:\predavanja\oop2\postavljenje_lekcije\2_abstract_builder\builder\ex1\graditeljproizvoda\graditelj.h
13 | "Proizvod.h"
14 |
15 |
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex2/GraditeljProizvoda/GraditeljProizvoda.layout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex2/GraditeljProizvoda/Proizvod.cpp:
--------------------------------------------------------------------------------
1 | #include "Proizvod.h"
2 |
3 | #include
4 |
5 | using namespace std;
6 |
7 | void Proizvod::prikazi() {
8 | cout << "" << endl;
9 | cout << "\tintSvojstvo: " << this->intSvojstvo << endl;
10 | cout << "\tfloatSvojstvo: " << this->floatSvojstvo << endl;
11 | cout << "\tcharSvojstvo: " << this->charSvojstvo << endl;
12 | }
13 |
14 | void Proizvod::uradiNesto() {
15 | cout << "Proizvod > Radim nesto..." << endl;
16 | }
17 |
18 | void Proizvod::uradiNestoDrugo() {
19 | cout << "Proizvod > Radim nesto drugo..." << endl;
20 | }
21 |
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex2/GraditeljProizvoda/Proizvod.h:
--------------------------------------------------------------------------------
1 | #ifndef __PROIZVOD_H
2 | #define __PROIZVOD_H
3 |
4 | /* konkretan proizvod */
5 | class Proizvod {
6 | private:
7 | /* interna svojstva proizvoda, npr. delovi proizvoda */
8 | int intSvojstvo;
9 | float floatSvojstvo;
10 | char charSvojstvo;
11 | public:
12 | /* konstruktor proizvoda */
13 | Proizvod() {}
14 | Proizvod(const int intSvojstvo, const float floatSvojstvo, const char charSvojstvo) :
15 | intSvojstvo(intSvojstvo),
16 | floatSvojstvo(floatSvojstvo),
17 | charSvojstvo(charSvojstvo) {}
18 | void postaviIntSvojstvo(int intSvojstvo) { this->intSvojstvo = intSvojstvo; }
19 | void postaviFloatSvojstvo(float floatSvojstvo) { this->floatSvojstvo = floatSvojstvo; }
20 | void postaviCharSvojstvo(char charSvojstvo) { this->charSvojstvo = charSvojstvo; }
21 | void prikazi();
22 | void uradiNesto();
23 | void uradiNestoDrugo();
24 | };
25 |
26 |
27 |
28 | #endif // __PROIZVOD_H
29 |
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex2/GraditeljProizvoda/ProizvodMain.cpp:
--------------------------------------------------------------------------------
1 | #include "Proizvod.h"
2 | #include "Graditelj.h"
3 |
4 | /* koriscenje graditelja */
5 | int main(){
6 | /* kombinovano koriscenje za postavljanje svojstava */
7 | Proizvod proizvod1 = Graditelj().postaviIntSvojstvo(2)
8 | .postaviFloatSvojstvo(0.5f)
9 | .postaviCharSvojstvo('x')
10 | .napraviProizvod();
11 | proizvod1.prikazi();
12 |
13 | /* drugi vid koriscenja, napravimo jedan proizvod, posle napravimo izmene putem graditelja i vratimo
14 | drugi, izmenjeni proizvod */
15 | Graditelj graditelj;
16 | graditelj.postaviProizvod();
17 | Proizvod proizvod2 = graditelj.napraviProizvod();
18 | graditelj.postaviCharSvojstvo('*');
19 | Proizvod proizvod3 = graditelj.napraviProizvod();
20 | proizvod2.prikazi();
21 | proizvod3.prikazi();
22 | }
23 |
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex2/GraditeljProizvoda/bin/Debug/GraditeljProizvoda.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/2_abstractbuilder/builder/ex2/GraditeljProizvoda/bin/Debug/GraditeljProizvoda.exe
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex2/GraditeljProizvoda/obj/Debug/Proizvod.o:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/2_abstractbuilder/builder/ex2/GraditeljProizvoda/obj/Debug/Proizvod.o
--------------------------------------------------------------------------------
/2_abstractbuilder/builder/ex2/GraditeljProizvoda/obj/Debug/ProizvodMain.o:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/2_abstractbuilder/builder/ex2/GraditeljProizvoda/obj/Debug/ProizvodMain.o
--------------------------------------------------------------------------------
/3_factorymethodprototype/factory_method/ex1/FactoryMethod/ConcreteCreator.cpp:
--------------------------------------------------------------------------------
1 | #include "ConcreteCreator.h"
2 | #include "ConcreteProduct.h"
3 |
4 | Product* ConcreteCreator::factoryMethod() {
5 | return new ConcreteProduct();
6 | }
7 |
--------------------------------------------------------------------------------
/3_factorymethodprototype/factory_method/ex1/FactoryMethod/ConcreteCreator.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETE_CREATOR_H
2 | #define __CONCRETE_CREATOR_H
3 |
4 | #include "Creator.h"
5 |
6 | /* konkretan kreator/stvaralac koji ima fabricki metod za stvaranje konkretnog proizvoda */
7 | class ConcreteCreator: public Creator {
8 | public:
9 | Product* factoryMethod();
10 | };
11 | #endif // __CONCRETE_CREATOR_H
12 |
--------------------------------------------------------------------------------
/3_factorymethodprototype/factory_method/ex1/FactoryMethod/ConcreteProduct.cpp:
--------------------------------------------------------------------------------
1 | #include "ConcreteProduct.h"
2 |
3 | #include
4 |
5 | using namespace std;
6 |
7 | void ConcreteProduct::use() {
8 | cout << "Koristim konkretan proizvod" << endl;
9 | }
10 |
--------------------------------------------------------------------------------
/3_factorymethodprototype/factory_method/ex1/FactoryMethod/ConcreteProduct.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETE_PRODUCT_H
2 | #define __CONCRETE_PRODUCT_H
3 |
4 | #include "Product.h"
5 |
6 | /* konkretan proizvod */
7 | class ConcreteProduct: public Product {
8 | public:
9 | void use();
10 | };
11 | #endif // __CONCRETE_PRODUCT_H
12 |
--------------------------------------------------------------------------------
/3_factorymethodprototype/factory_method/ex1/FactoryMethod/Creator.h:
--------------------------------------------------------------------------------
1 | #ifndef __CREATOR_H
2 | #define __CREATOR_H
3 |
4 | #include "Product.h"
5 |
6 | /* apstraktni kreator/stvaralac koji u ovom slucaju ima samo jedan fabricki metod
7 | koji kreira proizvode */
8 | class Creator {
9 | public:
10 | virtual Product* factoryMethod() = 0;
11 | };
12 | #endif // __CREATOR_H
13 |
--------------------------------------------------------------------------------
/3_factorymethodprototype/factory_method/ex1/FactoryMethod/FactoryMethodMain.cpp:
--------------------------------------------------------------------------------
1 |
2 | #include "ConcreteCreator.h"
3 | #include "Product.h"
4 |
5 | /* testiranje kreatora koji je dizajniran sledeci sablon fabricki metod,
6 | pravimo konkretnog kreatora i pomocu njegovog fabrickog metoda kreiramo konkretan
7 | proizvod */
8 | int main() {
9 | Creator *creator = new ConcreteCreator();
10 | Product *product = creator->factoryMethod();
11 | product->use();
12 |
13 | delete creator;
14 | delete product;
15 | }
16 |
--------------------------------------------------------------------------------
/3_factorymethodprototype/factory_method/ex1/FactoryMethod/Product.h:
--------------------------------------------------------------------------------
1 | #ifndef __PRODUCT_H
2 | #define __PRODUCT_H
3 |
4 | /* apstraktan proizvod */
5 | class Product {
6 | public:
7 | virtual void use() = 0;
8 | };
9 | #endif // __PRODUCT_H
10 |
--------------------------------------------------------------------------------
/3_factorymethodprototype/prototype/ex1/Prototype/ConcretePrototype1.cpp:
--------------------------------------------------------------------------------
1 | #include "ConcretePrototype1.h"
2 | #include
3 |
4 | using namespace std;
5 |
6 | Prototype* ConcretePrototype1::clone() {
7 | return new ConcretePrototype1();
8 | }
9 |
10 | void ConcretePrototype1::use() {
11 | cout << "Koristim konkretan prototip 1" << endl;
12 | }
13 |
--------------------------------------------------------------------------------
/3_factorymethodprototype/prototype/ex1/Prototype/ConcretePrototype1.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETE_PROTOTYPE1_H
2 | #define __CONCRETE_PROTOTYPE1_H
3 |
4 | #include "Prototype.h"
5 |
6 | /* konkretan prototip koji implementira metod za kloniranje */
7 | class ConcretePrototype1: public Prototype {
8 | public:
9 | Prototype* clone();
10 | void use();
11 | };
12 | #endif // __CONCRETE_PROTOTYPE1_H
13 |
--------------------------------------------------------------------------------
/3_factorymethodprototype/prototype/ex1/Prototype/ConcretePrototype2.cpp:
--------------------------------------------------------------------------------
1 | #include "ConcretePrototype2.h"
2 | #include
3 |
4 | using namespace std;
5 |
6 | Prototype* ConcretePrototype2::clone() {
7 | return new ConcretePrototype2();
8 | }
9 |
10 | void ConcretePrototype2::use() {
11 | cout << "Koristim konkretan prototip 2" << endl;
12 | }
13 |
--------------------------------------------------------------------------------
/3_factorymethodprototype/prototype/ex1/Prototype/ConcretePrototype2.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETE_PROTOTYPE2_H
2 | #define __CONCRETE_PROTOTYPE2_H
3 |
4 | #include "Prototype.h"
5 |
6 | /* konkretan prototip koji implementira metod za kloniranje */
7 | class ConcretePrototype2: public Prototype {
8 | public:
9 | Prototype* clone();
10 | void use();
11 | };
12 | #endif // __CONCRETE_PROTOTYPE2_H
13 |
--------------------------------------------------------------------------------
/3_factorymethodprototype/prototype/ex1/Prototype/Prototype.depend:
--------------------------------------------------------------------------------
1 | # depslib dependency file v1.0
2 | 1446736310 source:e:\predavanja\oop2\lekcije\3_factorymethod_prototype\ex1\factorymethod\prototype\concreteprototype1.cpp
3 | "ConcretePrototype1.h"
4 |
5 |
6 | 1446736295 e:\predavanja\oop2\lekcije\3_factorymethod_prototype\ex1\factorymethod\prototype\concreteprototype1.h
7 | "Prototype.h"
8 |
9 | 1446735895 e:\predavanja\oop2\lekcije\3_factorymethod_prototype\ex1\factorymethod\prototype\prototype.h
10 |
11 | 1446736310 source:e:\predavanja\oop2\postavljenje_lekcije\3_factorymethodprototype\prototype\ex1\prototype\concreteprototype1.cpp
12 | "ConcretePrototype1.h"
13 |
14 |
15 | 1447266399 e:\predavanja\oop2\postavljenje_lekcije\3_factorymethodprototype\prototype\ex1\prototype\concreteprototype1.h
16 | "Prototype.h"
17 |
18 | 1447266377 e:\predavanja\oop2\postavljenje_lekcije\3_factorymethodprototype\prototype\ex1\prototype\prototype.h
19 |
20 | 1446736331 source:e:\predavanja\oop2\postavljenje_lekcije\3_factorymethodprototype\prototype\ex1\prototype\concreteprototype2.cpp
21 | "ConcretePrototype2.h"
22 |
23 |
24 | 1447266393 e:\predavanja\oop2\postavljenje_lekcije\3_factorymethodprototype\prototype\ex1\prototype\concreteprototype2.h
25 | "Prototype.h"
26 |
27 |
--------------------------------------------------------------------------------
/3_factorymethodprototype/prototype/ex1/Prototype/Prototype.h:
--------------------------------------------------------------------------------
1 | #ifndef __PROTOTYPE_H
2 | #define __PROTOTYPE_H
3 |
4 | /* apstraktan prototip koji ima metod za kloniranje objekta */
5 | class Prototype {
6 | public:
7 | virtual Prototype* clone() = 0;
8 | virtual void use() = 0;
9 | };
10 | #endif // __PROTOTYPE_H
11 |
--------------------------------------------------------------------------------
/3_factorymethodprototype/prototype/ex1/Prototype/PrototypeMain.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include "ConcretePrototype1.h"
3 | #include "ConcretePrototype2.h"
4 |
5 | using namespace std;
6 |
7 | /* primer upotrebe sablona prototip,
8 | kreiramo dva konkretna proizvoda (direktnim pozivom njihovih konstruktora) koji ce da imaju
9 | tip apstraktnog proizvoda a zatim kreiramo njihove kopije pozivajuci metod za kloniranje, clone */
10 | int main() {
11 | Prototype *prototype1 = new ConcretePrototype1();
12 | Prototype *prototype2 = new ConcretePrototype2();
13 | cout << "Koristim originalne prototipove: " << endl;
14 | prototype1->use();
15 | prototype2->use();
16 |
17 | Prototype *clonePrototype1 = prototype1->clone();
18 | Prototype *clonePrototype2 = prototype2->clone();
19 |
20 | cout << "Koristim klonirane prototipove: " << endl;
21 | clonePrototype1->use();
22 | clonePrototype2->use();
23 |
24 | delete prototype1;
25 | delete prototype2;
26 | delete clonePrototype1;
27 | delete clonePrototype2;
28 | return 0;
29 | }
30 |
31 |
--------------------------------------------------------------------------------
/4_singletonadapter/adapter/ex1/ClassAdapter/Adaptee.h:
--------------------------------------------------------------------------------
1 | #ifndef __ADAPTEE_H
2 | #define __ADAPTEE_H
3 |
4 | #include
5 |
6 | /* klasa koju treba da adaptiramo interfejsu Target,
7 | poseduje metode koji ne odgovaraju metodima Target,
8 | zato nam je potreban adapter koji ce nam omoguciti da ovu klasu
9 | Adaptee koristimo kao vidljiv interfejs Target,
10 | implementacija metoda iz Target koju radi Adapter se vrsi
11 | pomocu dostupnih metoda iz Adaptee */
12 | class Adaptee {
13 | public:
14 | void SpecificRequest() {
15 | std::cout << "Adaptee.SpecificRequest() called" << std::endl;
16 | }
17 | };
18 | #endif // __ADAPTEE_H
19 |
20 |
--------------------------------------------------------------------------------
/4_singletonadapter/adapter/ex1/ClassAdapter/Adapter.h:
--------------------------------------------------------------------------------
1 | #ifndef __ADAPTER_H
2 | #define __ADAPTER_H
3 |
4 | #include "Target.h"
5 | #include "Adaptee.h"
6 | #include
7 |
8 | /* klasa koja vrsi prilagodjavanje klase Adaptee ciljanom interfejsu,
9 | apstraktnoj klasi Target,
10 | vrsi implementaciju svih metoda u interfejsu Target pomocu
11 | nasledjenih metoda klase koju adaptira Adaptee
12 | u ovom slucaju treba da implementira metod Request iz interfejsa
13 | Target a to radi pozivom nasledjenog metoda SpecificRequest iz
14 | klase Adaptee
15 | nasledjivanje iz Target je public/javno
16 | dok je nasledjivanje Adaptee privatno/private jer ne zelimo
17 | da nasledjene klase od Adapter imaju pristup metodima/poljima
18 | iz Adaptee */
19 | class Adapter: public Target, private Adaptee {
20 | public:
21 | void Request() {
22 | std::cout << "Adapter.Request() called, is using inherited SpecificRequest to complete Request" << std::endl;
23 | SpecificRequest();
24 | }
25 | };
26 |
27 | #endif // __ADAPTER_H
28 |
--------------------------------------------------------------------------------
/4_singletonadapter/adapter/ex1/ClassAdapter/AdapterMain.cpp:
--------------------------------------------------------------------------------
1 | #include "Adapter.h"
2 |
3 | /* kreiramo instancu klase Adapter i pozivamo
4 | adaptirani metod Request */
5 | int main() {
6 | Target *target = new Adapter();
7 | target->Request();
8 |
9 | delete target;
10 | return 0;
11 | }
12 |
--------------------------------------------------------------------------------
/4_singletonadapter/adapter/ex1/ClassAdapter/ClassAdapter.cbp:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/4_singletonadapter/adapter/ex1/ClassAdapter/ClassAdapter.depend:
--------------------------------------------------------------------------------
1 | # depslib dependency file v1.0
2 | 1447339440 source:d:\___predavanja\oop2\lekcije\4_singleton_adapter_bridge\adapter\ex1\classadapter\adaptermain.cpp
3 | "Adapter.h"
4 |
5 | 1447339464 d:\___predavanja\oop2\lekcije\4_singleton_adapter_bridge\adapter\ex1\classadapter\adapter.h
6 | "Target.h"
7 | "Adaptee.h"
8 |
9 |
10 | 1447339260 d:\___predavanja\oop2\lekcije\4_singleton_adapter_bridge\adapter\ex1\classadapter\target.h
11 |
12 | 1447339454 d:\___predavanja\oop2\lekcije\4_singleton_adapter_bridge\adapter\ex1\classadapter\adaptee.h
13 |
14 |
15 | 1447624803 source:e:\predavanja\oop2\postavljenje_lekcije\4_singleton_adapter\adapter\ex1\classadapter\adaptermain.cpp
16 | "Adapter.h"
17 |
18 | 1447624838 e:\predavanja\oop2\postavljenje_lekcije\4_singleton_adapter\adapter\ex1\classadapter\adapter.h
19 | "Target.h"
20 | "Adaptee.h"
21 |
22 |
23 | 1447624534 e:\predavanja\oop2\postavljenje_lekcije\4_singleton_adapter\adapter\ex1\classadapter\target.h
24 |
25 | 1447624714 e:\predavanja\oop2\postavljenje_lekcije\4_singleton_adapter\adapter\ex1\classadapter\adaptee.h
26 |
27 |
28 |
--------------------------------------------------------------------------------
/4_singletonadapter/adapter/ex1/ClassAdapter/ClassAdapter.layout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/4_singletonadapter/adapter/ex1/ClassAdapter/Target.h:
--------------------------------------------------------------------------------
1 | #ifndef __TARGET_H
2 | #define __TARGET_H
3 |
4 | /* ciljani interfejs koji zelimo da podrzava klasa
5 | koju treba da adaptiramo */
6 | class Target {
7 | public:
8 | virtual void Request() = 0;
9 | };
10 | #endif // __TARGET_H
11 |
--------------------------------------------------------------------------------
/4_singletonadapter/adapter/ex2/ObjectAdapter/Adaptee.h:
--------------------------------------------------------------------------------
1 | #ifndef __ADAPTEE_H
2 | #define __ADAPTEE_H
3 |
4 | #include
5 |
6 | /* klasa koju treba da adaptiramo interfejsu Target,
7 | poseduje metode koji ne odgovaraju metodima Target,
8 | zato nam je potreban adapter koji ce nam omoguciti da ovu klasu
9 | Adaptee koristimo kao vidljiv interfejs Target,
10 | implementacija metoda iz Target koju radi Adapter se vrsi
11 | pozivom javnih metoda od objekta tipa Adaptee */
12 | class Adaptee {
13 | public:
14 | void SpecificRequest() {
15 | std::cout << "Adaptee.SpecificRequest() called" << std::endl;
16 | }
17 | };
18 | #endif // __ADAPTEE_H
19 |
20 |
--------------------------------------------------------------------------------
/4_singletonadapter/adapter/ex2/ObjectAdapter/Adapter.h:
--------------------------------------------------------------------------------
1 | #ifndef __ADAPTER_H
2 | #define __ADAPTER_H
3 |
4 | #include "Target.h"
5 | #include "Adaptee.h"
6 | #include
7 |
8 | /* klasa koja vrsi prilagodjavanje klase Adaptee ciljanom interfejsu,
9 | apstraktnoj klasi Target,
10 | vrsi implementaciju svih metoda u interfejsu Target pomocu
11 | javnih metoda koje poziva na objektu klase Adaptee
12 | sto znaci da ima pristup instanci objekta Adaptee
13 | u ovom slucaju treba da implementira metod Request iz interfejsa
14 | Target a to radi pozivom metoda SpecificRequest od objekta tipa Adaptee */
15 | class Adapter: public Target {
16 | private:
17 | Adaptee *adaptee;
18 | public:
19 | Adapter() {
20 | adaptee = new Adaptee();
21 | }
22 | ~Adapter() { delete adaptee; }
23 | void Request() {
24 | std::cout << "Adapter.Request() called, is using SpecificRequest method of Adaptee object to complete Request" << std::endl;
25 | adaptee->SpecificRequest();
26 | }
27 | };
28 |
29 | #endif // __ADAPTER_H
30 |
--------------------------------------------------------------------------------
/4_singletonadapter/adapter/ex2/ObjectAdapter/AdapterMain.cpp:
--------------------------------------------------------------------------------
1 | #include "Adapter.h"
2 |
3 | /* kreiramo instancu klase Adapter i pozivamo
4 | adaptirani metod Request */
5 | int main() {
6 | Target *target = new Adapter();
7 | target->Request();
8 |
9 | delete target;
10 | return 0;
11 | }
12 |
--------------------------------------------------------------------------------
/4_singletonadapter/adapter/ex2/ObjectAdapter/ClassAdapter.layout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/4_singletonadapter/adapter/ex2/ObjectAdapter/ObjectAdapter.cbp:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/4_singletonadapter/adapter/ex2/ObjectAdapter/ObjectAdapter.depend:
--------------------------------------------------------------------------------
1 | # depslib dependency file v1.0
2 | 1447339439 source:e:\predavanja\oop2\lekcije\4_singleton_adapter_bridge\adapter\ex2\objectadapter\adaptermain.cpp
3 | "Adapter.h"
4 |
5 | 1447339640 e:\predavanja\oop2\lekcije\4_singleton_adapter_bridge\adapter\ex2\objectadapter\adapter.h
6 | "Target.h"
7 | "Adaptee.h"
8 |
9 |
10 | 1447339259 e:\predavanja\oop2\lekcije\4_singleton_adapter_bridge\adapter\ex2\objectadapter\target.h
11 |
12 | 1447339575 e:\predavanja\oop2\lekcije\4_singleton_adapter_bridge\adapter\ex2\objectadapter\adaptee.h
13 |
14 |
15 | 1447625063 source:e:\predavanja\oop2\postavljenje_lekcije\4_singleton_adapter\adapter\ex2\objectadapter\adaptermain.cpp
16 | "Adapter.h"
17 |
18 | 1447625402 e:\predavanja\oop2\postavljenje_lekcije\4_singleton_adapter\adapter\ex2\objectadapter\adapter.h
19 | "Target.h"
20 | "Adaptee.h"
21 |
22 |
23 | 1447625051 e:\predavanja\oop2\postavljenje_lekcije\4_singleton_adapter\adapter\ex2\objectadapter\target.h
24 |
25 | 1447624923 e:\predavanja\oop2\postavljenje_lekcije\4_singleton_adapter\adapter\ex2\objectadapter\adaptee.h
26 |
27 |
28 |
--------------------------------------------------------------------------------
/4_singletonadapter/adapter/ex2/ObjectAdapter/ObjectAdapter.layout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/4_singletonadapter/adapter/ex2/ObjectAdapter/Target.h:
--------------------------------------------------------------------------------
1 | #ifndef __TARGET_H
2 | #define __TARGET_H
3 |
4 | /* ciljani interfejs koji zelimo da podrzava klasa
5 | koju treba da adaptiramo */
6 | class Target {
7 | public:
8 | virtual void Request() = 0;
9 | };
10 | #endif // __TARGET_H
11 |
--------------------------------------------------------------------------------
/4_singletonadapter/singleton/ex1/Singleton/Singleton.cbp:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/4_singletonadapter/singleton/ex1/Singleton/Singleton.depend:
--------------------------------------------------------------------------------
1 | # depslib dependency file v1.0
2 | 1447321771 source:e:\predavanja\oop2\lekcije\4_singleton_adapter_bridge\singleton\ex1\singleton\singletonmain.cpp
3 | "Singleton.h"
4 |
5 | 1447321953 e:\predavanja\oop2\lekcije\4_singleton_adapter_bridge\singleton\ex1\singleton\singleton.h
6 |
7 |
8 | 1447344874 source:d:\___predavanja\oop2\lekcije\4_singleton_adapter_bridge\singleton\ex1\singleton\singletonmain.cpp
9 | "Singleton.h"
10 |
11 | 1447344859 d:\___predavanja\oop2\lekcije\4_singleton_adapter_bridge\singleton\ex1\singleton\singleton.h
12 |
13 |
14 | 1447620064 source:e:\predavanja\oop2\postavljenje_lekcije\4_singleton_adapter\singleton\ex1\singleton\singletonmain.cpp
15 | "Singleton.h"
16 |
17 | 1447620433 e:\predavanja\oop2\postavljenje_lekcije\4_singleton_adapter\singleton\ex1\singleton\singleton.h
18 |
19 |
20 |
--------------------------------------------------------------------------------
/4_singletonadapter/singleton/ex1/Singleton/Singleton.layout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/4_singletonadapter/singleton/ex1/Singleton/SingletonMain.cpp:
--------------------------------------------------------------------------------
1 | #include "Singleton.h"
2 |
3 | /* primer koriscenja unikat / Singleton sablona */
4 | int main() {
5 | Singleton* singletonInstance = Singleton::getInstance();
6 | singletonInstance->use();
7 |
8 | Singleton::getInstance()->use();
9 | return 0;
10 | }
11 |
--------------------------------------------------------------------------------
/4_singletonadapter/singleton/ex1/Singleton/bin/Debug/Singleton.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/4_singletonadapter/singleton/ex1/Singleton/bin/Debug/Singleton.exe
--------------------------------------------------------------------------------
/4_singletonadapter/singleton/ex1/Singleton/obj/Debug/SingletonMain.o:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/4_singletonadapter/singleton/ex1/Singleton/obj/Debug/SingletonMain.o
--------------------------------------------------------------------------------
/4_singletonadapter/singleton/ex5/FileSystem.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | using namespace std;
5 |
6 | /* singleton sablon, jedinstven primerak kreiramo putem loklane staticke promenljive unutar
7 | funkcije getInstance, kontruktori su privatni */
8 | class FileSystem {
9 | public:
10 | static FileSystem& getInstance() {
11 | static FileSystem s_fileSystem;
12 | return s_fileSystem;
13 | }
14 | void writeFile(string file) {
15 | cout << "Pisem file: '" << file << "'" << endl;
16 | }
17 | string readFile() {
18 | return "Procitani file";
19 | }
20 | private:
21 | FileSystem() { }
22 | FileSystem(const FileSystem& fileSystem) { }
23 | FileSystem& operator=(const FileSystem& fileSystem) { }
24 | };
25 |
26 | int main() {
27 | FileSystem &fileSystem = FileSystem::getInstance();
28 | fileSystem.writeFile("test file");
29 | cout << FileSystem::getInstance().readFile() << endl;
30 |
31 | return 0;
32 | }
33 |
--------------------------------------------------------------------------------
/5_bridgecomposite/bridge/ex1/Bridge/Abstraction.h:
--------------------------------------------------------------------------------
1 | #ifndef __ABSTRACTION_H
2 | #define __ABSTRACTION_H
3 |
4 | #include "Implementor.h"
5 |
6 | /* apstrakcija koja definise interfejs koji ima razlicite operacije koje su izvrsene koriscenjem
7 | implementacije koja je odvojena od same apstrakcije
8 | metodi apstrakcije su ostvareni pozivajuci konkretne implementacije metoda unutar objekta implementatora
9 | sadrzanog unutar apstrakcije,
10 | na ovaj nacin ostvareno je razdvajanje same apstrakcije / interfejsa metoda koje cemo da koristimo
11 | i njihove implementacije
12 | unutar destruktora apstrakcije mozemo a i ne moramo da unistimo i objekat implementor,
13 | zavisno od nacina koriscenja implementora
14 | u ovom slucaju cemo samostalno da unistimo objekat implementor */
15 | class Abstraction {
16 | protected:
17 | Implementor *m_implementor;
18 | public:
19 | Abstraction(Implementor *implementor): m_implementor(implementor) {}
20 | virtual ~Abstraction() {}
21 | virtual void operation() {
22 | m_implementor->operationImpl();
23 | }
24 |
25 | void setImplementor(Implementor *implementor) {
26 | m_implementor = implementor;
27 | }
28 | };
29 | #endif // __ABSTRACTION_H
30 |
--------------------------------------------------------------------------------
/5_bridgecomposite/bridge/ex1/Bridge/ConcreteImplementorA.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETE_IMPLEMENTORA_H
2 | #define __CONCRETE_IMPLEMENTORA_H
3 |
4 | #include
5 |
6 | #include "Implementor.h"
7 |
8 | /* konkretna implementacija A */
9 | class ConcreteImplementorA: public Implementor {
10 | public:
11 | ConcreteImplementorA() {}
12 | virtual ~ConcreteImplementorA() {}
13 | void operationImpl() {
14 | std::cout << "Izvrsavam metod operationImpl() unutar konkretnog implementatora A" << std::endl;
15 | }
16 | };
17 | #endif // __CONCRETE_IMPLEMENTORA_H
18 |
--------------------------------------------------------------------------------
/5_bridgecomposite/bridge/ex1/Bridge/ConcreteImplementorB.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETE_IMPLEMENTORB_H
2 | #define __CONCRETE_IMPLEMENTORB_H
3 |
4 | #include
5 |
6 | #include "Implementor.h"
7 |
8 | /* konkretna implementacija B */
9 | class ConcreteImplementorB: public Implementor {
10 | public:
11 | ConcreteImplementorB() {}
12 | virtual ~ConcreteImplementorB() {}
13 | void operationImpl() {
14 | std::cout << "Izvrsavam metod operationImpl() unutar konkretnog implementatora B" << std::endl;
15 | }
16 | };
17 | #endif // __CONCRETE_IMPLEMENTORB_H
18 |
--------------------------------------------------------------------------------
/5_bridgecomposite/bridge/ex1/Bridge/Implementor.h:
--------------------------------------------------------------------------------
1 | #ifndef __IMPLEMENTOR_H
2 | #define __IMPLEMENTOR_H
3 |
4 | /* interfejs konkretne implementacije */
5 | class Implementor {
6 | public:
7 | Implementor() {}
8 | virtual ~Implementor() {}
9 | virtual void operationImpl() = 0;
10 | };
11 |
12 | #endif // __IMPLEMENTOR_H
13 |
--------------------------------------------------------------------------------
/5_bridgecomposite/bridge/ex1/Bridge/RefinedAbstraction.h:
--------------------------------------------------------------------------------
1 | #ifndef __REFINED_ABSTRACTION_H
2 | #define __REFINED_ABSTRACTION_H
3 |
4 | #include "Abstraction.h"
5 |
6 | /* prosirena apstrakcija, moze da override-uje/nadjaca metode iz osnovne klase Apstrakcija
7 | pa na drugaciji nacin da koristi metode unutar implementatora
8 | u nasem slucaju nismo dali drugaciju implementaciju metoda operation() */
9 | class RefinedAbstraction: public Abstraction {
10 | public:
11 | RefinedAbstraction(Implementor *implementor) : Abstraction(implementor) {}
12 | virtual ~RefinedAbstraction() {}
13 | };
14 | #endif // __REFINED_ABSTRACTION_H
15 |
--------------------------------------------------------------------------------
/5_bridgecomposite/composite/ex1/CompositePattern/Component.h:
--------------------------------------------------------------------------------
1 | #ifndef __COMPONENT_H
2 | #define __COMPONENT_H
3 |
4 | /* komponenta koja ima razlicite operacije
5 | moguce je imati metode za dodelu, uklanjanje potkomponenti
6 | vec u ovoj apstraktnoj klasi komponente a ne u izvedenoj Composite
7 | ali u tom slucaju bi i proste komponente/listovi Leaf nasledili iste
8 | metode i morali bi da ih nadjacamo/override-ujemo i upravljamo/handle-ujemo
9 | taj slucaj ili sa izuzecima/exception ili na neki drugi nacin jer ne smemo
10 | da dozvolimo dodavanje ili uklanjanje potkomponenti od prostih komponenti
11 | drugi nacin je da sve komponente tretiramo kao slozene i omogucimo im
12 | da mogu da dobiju potkomponente, u tom slucaju bi se kao prosta komponenta
13 | tretirao onaj koji nema potkomponente, ali bi mu tip bio jednak kako i
14 | onima koji imaju potkomponente
15 | u nasem slucaju metode za dodavanje/uklanjanje potkomponenti nalaze se
16 | samo u Composite */
17 | class Component {
18 | public:
19 | virtual void operation() = 0;
20 | virtual ~Component() {}
21 | };
22 |
23 | #endif // __COMPONENT_H
24 |
--------------------------------------------------------------------------------
/5_bridgecomposite/composite/ex1/CompositePattern/CompositeMain.cpp:
--------------------------------------------------------------------------------
1 | #include "Composite.h"
2 | #include "Leaf.h"
3 |
4 | int main() {
5 | Composite *root = new Composite();
6 | Composite *leftChild = new Composite();
7 | Leaf *rightChild = new Leaf();
8 | Leaf *leftLeftChild = new Leaf();
9 | Leaf *leftRightChild = new Leaf();
10 | leftChild->add(leftLeftChild);
11 | leftChild->add(leftRightChild);
12 | root->add(leftChild);
13 | root->add(rightChild);
14 | /* kada pozovemo opereciju rekurzivno ce biti pozvana operacija na svim potkomponentama */
15 | root->operation();
16 |
17 | cout << "removing left child" << endl;
18 | root->remove(leftChild);
19 | root->operation();
20 |
21 | /* u ovom slucaju cemo mi rucno da eliminisemo sve komponente koje smo kreirali,
22 | ovaj kod ce da prijavljuje gresku ukoliko imamo destruktora za Composite koji
23 | unistava i potkomponente/decu, u tom slucaju dovoljno je unistiti samo koren
24 | svake od slozenih komponenti */
25 | delete root;
26 | delete leftChild;
27 | delete rightChild;
28 | delete leftLeftChild;
29 | delete leftRightChild;
30 |
31 | return 0;
32 | }
33 |
--------------------------------------------------------------------------------
/5_bridgecomposite/composite/ex1/CompositePattern/CompositePattern.layout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/5_bridgecomposite/composite/ex1/CompositePattern/Leaf.h:
--------------------------------------------------------------------------------
1 | #ifndef __LEAF_H
2 | #define __LEAF_H
3 |
4 | class Leaf: public Composite {
5 | public:
6 | virtual ~Leaf() {}
7 | virtual void operation() {
8 | cout << "Leaf.operation()" << endl;
9 | }
10 | };
11 | #endif // __LEAF_H
12 |
--------------------------------------------------------------------------------
/6_facadedecorator/decorator/ex1/Decorator/Component.h:
--------------------------------------------------------------------------------
1 | #ifndef __COMPONENT_H
2 | #define __COMPONENT_H
3 |
4 | /* apstraktna komponenta, napravicemo nekoliko izvedenih
5 | komponenti ali odredjena svojstva cemo da izdvojimo
6 | u zasebne klase - dekoratere/dopune koje mozemo
7 | po potrebi (i tokom izvrsavanja/runtime) da dodamo
8 | na nase konkretne komponente bez da pravimo instance
9 | neke druge potklase
10 | u ovom slucaju komponenta ima samo jednu operaciju
11 | koja moze da se ostvari na vise nacina
12 | svaki od tih nacina sa svojom nekom posebnom karakteristikom
13 | mozemo da imamo u nekoj od dopuna/dekoratera */
14 | class Component {
15 | public:
16 | virtual void operation() = 0;
17 | virtual ~Component() { }
18 | };
19 | #endif // __COMPONENT_H
20 |
--------------------------------------------------------------------------------
/6_facadedecorator/decorator/ex1/Decorator/ConcreteComponent.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETE_COMPONENT_H
2 | #define __CONCRETE_COMPONENT_H
3 |
4 | #include
5 |
6 | #include "Component.h"
7 |
8 | /* konkretna komponenta, implementira operaciju koju nasledjuje */
9 | class ConcreteComponent: public Component {
10 | public:
11 | virtual void operation() {
12 | std::cout << "ConcreteComponent.operation() executed" << std::endl;
13 | }
14 | virtual ~ConcreteComponent() { }
15 | };
16 | #endif // __CONCRETE_COMPONENT_H
17 |
--------------------------------------------------------------------------------
/6_facadedecorator/decorator/ex1/Decorator/ConcreteDecorator.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETE_DECORATOR_H
2 | #define __CONCRETE_DECORATOR_H
3 |
4 | #include
5 |
6 | #include "Decorator.h"
7 |
8 | /* konkretna dopuna/dekorator
9 | implementira jedno svojstvo / nacin na koji ce biti ostvarena operacija
10 | na ovaj nacin imamo i odvojenost razlicitih implementacija od objekta
11 | konkretni dekorateri operaciju (u ovom slucaju operation()) implementiraju
12 | tako sto pozivaju metod operation() na objektu koji obogacuju ali uz to
13 | imaju i neku dodatnu implementaciju koja predstavlja to svojstvo koje
14 | konkretna dopuna nudi */
15 | class ConcreteDecorator: public Decorator {
16 | public:
17 | virtual void operation() {
18 | std::cout << "ConcreteDecorator.operation()" << std::endl;
19 | m_component->operation();
20 | }
21 | ConcreteDecorator(Component *component) : Decorator(component) {}
22 | virtual ~ConcreteDecorator() { }
23 | };
24 | #endif // __CONCRETE_DECORATOR_H
25 |
--------------------------------------------------------------------------------
/6_facadedecorator/decorator/ex1/Decorator/Decorator.layout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/6_facadedecorator/decorator/ex1/Decorator/DecoratorMain.cpp:
--------------------------------------------------------------------------------
1 | #include
2 |
3 | #include "ConcreteComponent.h"
4 | #include "ConcreteDecorator.h"
5 |
6 |
7 | int main() {
8 | /* kreiramo komponentu component koja je objekat tipa ConcreteDecorator cijem
9 | konstruktoru je prosledjen objekat tipa ConcreteComponent */
10 | std::unique_ptr component(new ConcreteDecorator(new ConcreteComponent()));
11 | /* pozivamo operaciju na komponenti koja je u stvari omotac/wrapper oko konkretnog
12 | objekta, pozivamo metod konkretnog dekoratera koji ce unutar sebe da pozove i metod
13 | objekta tipa ConcreteComponent */
14 | component->operation();
15 | /* kreiramo drugi objekat tipa ConcreteComponent i pozivamo operaciju */
16 | Component *component2 = new ConcreteComponent();
17 | component2->operation();
18 | /* kreiramo 'obogacenu' komponentu sa novim svojstvom koje nudi ConcreteDecorator
19 | dopuna, konstruktoru prosledjujemo objekat koji zelimo da obogatimo */
20 | Component *enhancedComponent = new ConcreteDecorator(component2);
21 | /* i pozivamo operaciju na obogacenom objektu */
22 | enhancedComponent->operation();
23 |
24 | delete enhancedComponent;
25 |
26 | return 0;
27 | }
28 |
--------------------------------------------------------------------------------
/6_facadedecorator/decorator/ex3/ZivotinjaDecorator.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/6_facadedecorator/decorator/ex3/ZivotinjaDecorator.exe
--------------------------------------------------------------------------------
/6_facadedecorator/decorator/ex3/ZivotinjaDecorator.o:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/andjelatodorovic/DesignPatterns/260ed4ff701da4cafbf182056e9bfc68363bfc70/6_facadedecorator/decorator/ex3/ZivotinjaDecorator.o
--------------------------------------------------------------------------------
/6_facadedecorator/facade/ex1/Facade/Class1.h:
--------------------------------------------------------------------------------
1 | #ifndef __CLASS1_H
2 | #define __CLASS1_H
3 |
4 | #include
5 |
6 | /* klasa koja predstavlja neki kompleksan podsistem */
7 | class Class1 {
8 | public:
9 | virtual void do1() {
10 | std::cout << "Class1.do1()" << std::endl;
11 | }
12 | };
13 | #endif // __CLASS1_H
14 |
--------------------------------------------------------------------------------
/6_facadedecorator/facade/ex1/Facade/Class2.h:
--------------------------------------------------------------------------------
1 | #ifndef __CLASS2_H
2 | #define __CLASS2_H
3 |
4 | #include
5 |
6 | /* klasa koja predstavlja neki kompleksan podsistem */
7 | class Class2 {
8 | public:
9 | virtual void do2() {
10 | std::cout << "Class2.do2()" << std::endl;
11 | }
12 | };
13 | #endif // __CLASS2_H
14 |
--------------------------------------------------------------------------------
/6_facadedecorator/facade/ex1/Facade/Class3.h:
--------------------------------------------------------------------------------
1 | #ifndef __CLASS3_H
2 | #define __CLASS3_H
3 |
4 | #include
5 |
6 | /* klasa koja predstavlja neki kompleksan podsistem */
7 | class Class3 {
8 | public:
9 | virtual void do3() {
10 | std::cout << "Class3.do3()" << std::endl;
11 | }
12 | };
13 | #endif // __CLASS3_H
14 |
--------------------------------------------------------------------------------
/6_facadedecorator/facade/ex1/Facade/Facade.cbp:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/6_facadedecorator/facade/ex1/Facade/Facade.depend:
--------------------------------------------------------------------------------
1 | # depslib dependency file v1.0
2 | 1448550576 source:d:\___predavanja\oop2\lekcije\6_facade_decorator\facade\ex1\facade\facademain.cpp
3 | "Facade.h"
4 |
5 | 1448550580 d:\___predavanja\oop2\lekcije\6_facade_decorator\facade\ex1\facade\facade.h
6 | "Class1.h"
7 | "Class2.h"
8 | "Class3.h"
9 |
10 |
11 | 1448550464 d:\___predavanja\oop2\lekcije\6_facade_decorator\facade\ex1\facade\class1.h
12 |
13 |
14 | 1448550482 d:\___predavanja\oop2\lekcije\6_facade_decorator\facade\ex1\facade\class2.h
15 |
16 |
17 | 1448550502 d:\___predavanja\oop2\lekcije\6_facade_decorator\facade\ex1\facade\class3.h
18 |
19 |
20 |
--------------------------------------------------------------------------------
/6_facadedecorator/facade/ex1/Facade/Facade.h:
--------------------------------------------------------------------------------
1 | #ifndef __FACADE_H
2 | #define __FACADE_H
3 |
4 | #include
5 |
6 | #include "Class1.h"
7 | #include "Class2.h"
8 | #include "Class3.h"
9 |
10 | /* umesto da klijent sam koristi 'haoticnu' kombinaciju
11 | podsistema i time poveca sanse da napravi gresku,
12 | napravimo interfejs fasada kojim cemo da klijentu
13 | napravimo dostupno nekoliko metoda
14 | koji su potrebni klijentu a za realizaciju tih metoda
15 | fasada ce koristiti podsisteme
16 | na ovaj nacin stepen slobode koriscenja podsistema
17 | je limitiran za klijenta, dostupno mu je samo sto
18 | API fasada nudi, naravno uvek je moguce prosiriti
19 | kolekciju metoda koju nudi fasada kada za to postoji
20 | potreba od strane klijenta */
21 | class Facade {
22 | public:
23 | virtual void doComplexWork() {
24 | Class1 c1;
25 | Class2 c2;
26 | Class3 c3;
27 | std::cout << "Facade.doComplexWork()" << std::endl;
28 | c1.do1();
29 | c2.do2();
30 | c3.do3();
31 | }
32 | };
33 | #endif // __FACADE_H
34 |
--------------------------------------------------------------------------------
/6_facadedecorator/facade/ex1/Facade/Facade.layout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/6_facadedecorator/facade/ex1/Facade/FacadeMain.cpp:
--------------------------------------------------------------------------------
1 | #include "Facade.h"
2 |
3 | /* klijent sada ima jednostavno koriscenje APIja koji nudi fasada
4 | na raspolaganju
5 | ne mora da brine o gomili stvari o kojima je trebao kada je
6 | samostalno trebao da ostvari operaciju koriscenjem razlicitih
7 | podsistema, ceo taj problem je prepusten fasadi koja nudi
8 | sada limitiran nacin koriscenja podsistema, ali ono sto je
9 | klijentu potrebno */
10 | int main() {
11 | Facade facade;
12 | facade.doComplexWork();
13 |
14 | return 0;
15 | }
16 |
--------------------------------------------------------------------------------
/7_flyweightproxy/flyweight/ex1/Flyweight/ConcreteFlyweight.h:
--------------------------------------------------------------------------------
1 | #ifndef __CONCRETE_FLYWEIGHT_H
2 | #define __CONCRETE_FLYWEIGHT_H
3 |
4 | #include
5 |
6 | #include "Flyweight.h"
7 | /* konkretna muva koja je deljiva
8 | kod konstrukcije muva / flyweight objekata neophodno je uspesno odvojiti interno state / intrinsic state
9 | koje moze biti deljivo i nezavisno od konteksta u kojem se konkretne muve koriste,
10 | i spoljasnje stanje koje zavisi od konteksta u kojem se ta muva deli i koje svaki korisnik konkretne muve
11 | to spoljasnje stanje moze da prosledi objektu konkretne muve */
12 | class ConcreteFlyweight: public Flyweight {
13 | public:
14 | ConcreteFlyweight(const string& intrinsicState) : Flyweight(intrinsicState) {}
15 | virtual ~ConcreteFlyweight() {}
16 | virtual void Operation(const string& extrinsicState) {
17 | std::cout << "ConcreteFlyweight.Operation(" << extrinsicState << "), intrinsicState = " << GetIntrinsicState() << std::endl;
18 | }
19 | };
20 |
21 | #endif // __CONCRETE_FLYWEIGHT_H
22 |
--------------------------------------------------------------------------------
/7_flyweightproxy/flyweight/ex1/Flyweight/Flyweight.h:
--------------------------------------------------------------------------------
1 | #ifndef __FLYWEIGHT_H
2 | #define __FLYWEIGHT_H
3 |
4 | /* apstraktna klasa za Flyweight/muva objekte
5 | svaki objekat tog tipa ima unustrasnje (instrinsic) stanje koje ne zavisi od konteksta (okruzenja)
6 | u kome se objekat nalazi, i spoljasnje (extrinsic) koje zavisi od konteksta (okruzenja) u kome se objekat koristi
7 | u nasem slucaju spoljasnje stanje prosledjujemo preko parametara extrinsicState metoda Operation */
8 | class Flyweight {
9 | public:
10 | virtual ~Flyweight() {}
11 | virtual void Operation(const string& extrinsicState) = 0;
12 | virtual string GetIntrinsicState() { return m_intrinsicState; }
13 | protected:
14 | Flyweight(string intrinsicState) : m_intrinsicState(intrinsicState) { }
15 | private:
16 | string m_intrinsicState;
17 | };
18 |
19 | #endif // __FLYWEIGHT_H
20 |
--------------------------------------------------------------------------------
/7_flyweightproxy/flyweight/ex1/Flyweight/Flyweight.layout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/7_flyweightproxy/flyweight/ex1/Flyweight/FlyweightFactory.h:
--------------------------------------------------------------------------------
1 | #ifndef __FLYWEIGHTFACTORY_H
2 | #define __FLYWEIGHTFACTORY_H
3 |
4 | #include