jgs
Javier Gonzalez-Sanchez | CSC 308 | Winter 2023 | 6
class MainApp {
public static void Main(String []a){
// Constructor is protected -- cannot use new
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
// Test for same instance
if (s1 == s2){
// true - Objects are the same instance
}
}
}
Singleton
Slide 7
Slide 7 text
jgs
Javier Gonzalez-Sanchez | CSC 308 | Winter 2023 | 7
class Singleton{
private static Singleton _instance;
// Constructor is 'protected'
protected Singleton() {}
public static Singleton getInstance(){
if (_instance == null){
_instance = new Singleton();
}
return _instance;
}
}
Singleton
jgs
Javier Gonzalez-Sanchez | CSC 308 | Winter 2023 | 18
class MainApp {
static void main() {
// Create ConcreteComponent and two Decorators
ConcreteComponent c = new ConcreteComponent();
ConcreteDecoratorA d1 = new ConcreteDecoratorA();
ConcreteDecoratorB d2 = new ConcreteDecoratorB();
// Link decorators
d1.SetComponent(c);
d2.SetComponent(d1);
d2.Operation();
}
}
Main
Slide 19
Slide 19 text
jgs
Javier Gonzalez-Sanchez | CSC 308 | Winter 2023 | 19
class MainApp {
static void main() {
// Create ConcreteComponent and two Decorators
ConcreteComponent c = new ConcreteComponent();
ConcreteDecoratorA d1 = new ConcreteDecoratorA();
ConcreteDecoratorB d2 = new ConcreteDecoratorB();
// Link decorators
d1.SetComponent(c);
d2.SetComponent(d1);
d2.Operation();
}
}
Main
ConcreteComponent - Operation()
ConcreteDecoratorA - Operation()
ConcreteDecoratorB - Operation()
Slide 20
Slide 20 text
jgs
Javier Gonzalez-Sanchez | CSC 308 | Winter 2023 | 20
§ Both allow you to change how an object behaves
§ The decorator pattern can be used to make it possible to extend (decorate)
the functionality of a certain object at runtime.
§ Inheritance adds behavior at compilation-time.
Decorator vs Inheritance
jgs
Javier Gonzalez-Sanchez | CSC 308 | Winter 2023 | 26
Main
Slide 27
Slide 27 text
jgs
Javier Gonzalez-Sanchez | CSC 308 | Winter 2023 | 27
public interface Companion {
public void doSomething();
}
Companion
Slide 28
Slide 28 text
jgs
Javier Gonzalez-Sanchez | CSC 308 | Winter 2023 | 28
public class BasicCompanion implements Companion {
@Override
public void doSomething() {
System.out.print("Hello Student, ");
}
}
BasicCompanion
Slide 29
Slide 29 text
jgs
Javier Gonzalez-Sanchez | CSC 308 | Winter 2023 | 29
public class CompanionDecorator implements Companion {
protected Companion c;
public void add(Companion c){
this.c = c;
}
@Override
public void doSomething() {
this.c.doSomething();
}
}
CompanionDecorator
Slide 30
Slide 30 text
jgs
Javier Gonzalez-Sanchez | CSC 308 | Winter 2023 | 30
public class HelperCompanion extends CompanionDecorator {
@Override
public void doSomething(){
super.doSomething();
System.out.print(" I am here to help you. ");
}
}
HelperCompanion
Slide 31
Slide 31 text
jgs
Javier Gonzalez-Sanchez | CSC 308 | Winter 2023 | 31
public class AffectiveCompanion extends CompanionDecorator {
@Override
public void doSomething(){
super.doSomething();
System.out.print(" I am here to cheer you.");
}
}
AffectiveCompanion
Slide 32
Slide 32 text
jgs
Javier Gonzalez-Sanchez | CSC 308 | Winter 2023 | 32
Main
jgs
Javier Gonzalez-Sanchez | CSC 308 | Winter 2023 | 34
Office Hours
Tuesday and Thursday 3 - 5 pm
But an appointment required
Sent me an email – [email protected]
Slide 35
Slide 35 text
jgs
Slide 36
Slide 36 text
jgs
CSC 308
Software Engineering 1
Lab 16:
Design Patterns
Dr. Javier Gonzalez-Sanchez
[email protected]
www.javiergs.com
Building 14 -227
Office Hours: By appointment
jgs
Javier Gonzalez-Sanchez | CSC 308 | Winter 2023 | 39
Let’s Work
Slide 40
Slide 40 text
jgs
CSC 308 Software Engineering I
Javier Gonzalez-Sanchez, Ph.D.
[email protected]
Winter 2023
Copyright. These slides can only be used as study material for the class CSC308 at Cal Poly.
They cannot be distributed or used for another purpose.