A Day in the Life
Trying to fix the website so that things don’t look like trash.
Updating build images from ubuntu-latest to ubuntu-24.04 [beta] because there’s a switch upcomming and it’s better to be proactive
Example Header File
#pragma once
#include <vector>
/////////////////////////
// Locomotion Strategy //
/////////////////////////
// This is the first of the strategy patterns - if you are unfamiliar with
// the strategy design pattern, consult this reference:
// https://refactoring.guru/design-patterns/strategy
class Locomotion {
public:
virtual void move() = 0;
};
class Swim : Locomotion {
public:
void move() override;
};
class Crawl : Locomotion {
public:
void move() override;
};
class Stationary : Locomotion {
public:
void move() override;
};
/////////////////////
// Action Strategy //
/////////////////////
// Another implementation of a strategy pattern - here we delegate the various ways
// a sea creature can behave to their own classes. That way multiple creatures can
// depend on the same behavior - several fish can blow bubbles, for example.
class Action {
public:
virtual void act() = 0;
};
class BlowBubble : Action {
public:
void act() override;
};
class PuffUp : Action {
public:
void act() override;
};
class ChangeColor : Action {
public:
void act() override;
};
///////////////////////
// Resource Strategy //
///////////////////////
// the final implementation of the strategy pattern
class Resource {
public:
virtual void collect() = 0;
};
class Pearl : Resource {
public:
void collect() override;
};
class Shell : Resource {
public:
void collect() override;
};
class FishFillet : Resource {
public:
void collect() override;
};
//////////////////////////////
// Sea Creature Composition //
//////////////////////////////
// Here we tie everything we've built together in a single class.
// Note that in order to reference an interface such as locomotion in C++
// we need to use a pointer. We are not savages, so we use a smart pointer.
class SeaCreature {
private:
std::unique_ptr<Locomotion> locomotion;
std::vector<Action> actions;
std::vector<Resource> contained_resources;
public:
void move();
void act();
void collect_resources();
};