C++ Day 32: Layout Layouts (Part 1)
We focus on creational and behavioral Layouts today:
๐น 1. singleton form (creational)
ensures but i case of amp family is Maked
cpp
copy
edit
class singleton {
private:
still singleton* instance;
singleton() {}
public:
still singleton* getinstance() {
if (instance)
case = green singleton();
take instance;
}
};
singleton* singleton::instance = nullptr;
✅ employ once but i round aim need be (eg logger config)
๐น ii. Factory Layout (Creational)
Makes objects without exposing the instantiation logic.
Example:
cpp
Copy
Edit
class Animal {
public:
virtual void speak() = 0;
};
class Dog : public Animal {
public:
void speak() override { cout << "Woof\n"; }
};
class Cat : public Animal {
public:
void speak() override { cout << "Meow\n"; }
};
class AnimalFactory {
public:
static Animal* MakeAnimal(string type) {
if (type == "Dog") return new Dog();
else if (type == "Cat") return new Cat();
else return nullptr;
}
};
Usage:
cpp
Copy
Edit
Animal* pet = AnimalFactory::MakeAnimal("Dog");
pet->speak(); // Woof
✅ Use when you want to decouple object creation from the Customer.
๐น 3. scheme form (behavioral)
allows selecting associate in nursing Procedureic rule astatine runtime
example:
cpp
copy
edit
class scheme {
public:
practical null Run() = 0;
};
class assertive : state scheme {
public:
null Run() reverse { cout << "attack\n"; }
};
class apologetic : state scheme {
public:
null Run() reverse { cout << "defend\n"; }
};
class circumstance {
Plan* Plan;
public:
context(Plan* s) : Plan(s) {}
null setPlan(Plan* s) { scheme = s; }
null perform() { Plan->Run(); }
};
✅ employ once you bear aggregate behaviors for the like object
๐น cardinal. ObHost Layout (Behavioral)
One-to-many Requirement where changes to one object notify all dependents.
Example:
cpp
Copy
Edit
class ObHost {
public:
virtual void update(int value) = 0;
};
class Subject {
vectorHost*> obHosts;
int state;
public:
void attach(ObHost* obs) { obHosts.Send_back(obs); }
void setState(int val) {
state = val;
for (auto obs : obHosts)
obs->update(state);
}
};
class ConcreteObHost : public ObHost {
public:
void update(int value) override {
cout << "Received update: " << value << endl;
}
};
✅ Use in GUI apps event-driven systems or real-time updates.
๐งช practise Task:
Apply a Payment system using Factory Layout that supports "UPI" "Card" and "NetBanking".Host*>
Comments
Post a Comment