DEV Community

海前 王
海前 王

Posted on

disign2

// ConsoleApplication30.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

include

include

using namespace std;
//
class fontFactory;
class font
{
private:
std::string key;
public:
font(const std::string& key ):key(key)
{

}
Enter fullscreen mode Exit fullscreen mode

};

class fontFactory
{
map footpool;
public:
font * getfont(const string &key)
{
map::iterator it = footpool.find(key);

    if (it != footpool.end())
    {
        return footpool[key];

    }
    else
    {
        font* font = new ::font(key);
        footpool[key] = font;
        return font;
    }
}
Enter fullscreen mode Exit fullscreen mode

};
int main()
{
std::cout << "Hello World!\n";
}

// expressionPattern.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

include

include

include

using namespace std;

class expression
{
public:
virtual int interperet(std::map var)
{};

private:
};

class varexpression : public expression
{
string m_key;

public:
varexpression(string key): m_key(key)
{
}

virtual int interperet(std::map<std::string, int> var)
{
    return var[m_key];
}
Enter fullscreen mode Exit fullscreen mode

};

class symbolExpression : public expression
{
public:
expression* left;
expression* right;

symbolExpression(expression* l, expression* r):
    left(l), right(r)
{
}

expression* getleft() { return left; }
expression* getright() { return right; }
Enter fullscreen mode Exit fullscreen mode

};

class addExpression : public symbolExpression
{
public:
addExpression(expression* l, expression* r) : symbolExpression(l, r)
{
}
};

class subExpression : public symbolExpression
{
public:
subExpression(expression* l, expression* r) : symbolExpression(l, r)
{
}
};

class calculator
{
public:
expression* m_expression;

calculator(string ex)
{
    m_expression = nullptr;
    stack<expression*> strexp;
    expression* right;
    expression* left;
    for (int i = 0; ex.length(); i++)
    {
        switch (ex[i])
        {
        case '+':
            left = strexp.top();
            strexp.pop();
            right = new varexpression(ex.substr(++i, 1));
            strexp.push(new addExpression(left, right));
            break;
        case '-':
            left = strexp.top();
            strexp.pop();
            right = new varexpression(ex.substr(++i, 1));
            strexp.push(new subExpression(left, right));
            break;

        default:
            strexp.push(new varexpression(ex.substr(i, 1)));
        }
    }
    if(!strexp.empty())
    {
        //m_expression = strexp.pop();
        strexp.pop();
    }

}

int runing(map<string, int>& val)
{
    return (m_expression == nullptr) ? 0 : m_expression->interperet(val);
}
Enter fullscreen mode Exit fullscreen mode

};

int main()
{
}
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

include

include

include

using namespace std;

struct ShareState
{
string m_brand;
string m_model;
string m_color;

ShareState(const string& brand,
           const string model, const string color):m_brand(brand),m_model(model),m_color(color)
{
}

friend ostream& operator<<(ostream& os, const ShareState& ss)
{
    return os << ss.m_brand <<"\t"<< ss.m_color << "\t"<<ss.m_model<<"\n";
}
Enter fullscreen mode Exit fullscreen mode

};

struct uniqueState
{
string m_owner;
string m_plate;

uniqueState(const string& owner, const string& plate)
    : m_owner(owner), m_plate(plate)
{
}

//toString
friend ostream& operator<<(ostream& os, const uniqueState& ss)
{
    return os << ss.m_owner <<"\t"<< ss.m_plate<<"\n";
}
Enter fullscreen mode Exit fullscreen mode

};

//flyweight
class flyweight
{
private:
ShareState m_shareState;

public:
flyweight(const ShareState shares_state)
: m_shareState(shares_state)
{
}

void operation(uniqueState unique)
{
    cout <<"\n"<<"waibu" << "\t" <<m_shareState << "neibu" << unique;
}
Enter fullscreen mode Exit fullscreen mode

};

class FlyweightFactory
{
unordered_map m_flyweigt;

public:
string getKey(const ShareState& ss)
{
return ss.m_brand + " -" + ss.m_color + "-" + ss.m_model;
}

FlyweightFactory(initializer_list<ShareState> share_states)
{
    for (auto& ss : share_states)
    {
        m_flyweigt.insert({getKey(ss), flyweight(ss)});
    }
}

flyweight* getFlyweight(const ShareState& share_state)
{
    string key = getKey(share_state);
    if (m_flyweigt.find(key) == m_flyweigt.end())
    {
        std::cout << "not find";
        m_flyweigt.insert({key, share_state});
    }
    else
    {
        cout << "find";
    }

    return &m_flyweigt.at(key);
}

void listflyw() const
{
    int count = m_flyweigt.size();
    std::cout << "has" <<count;
    for (pair<string, flyweight> it : m_flyweigt)
    {
        cout << it.first << "\n";
    }
}
Enter fullscreen mode Exit fullscreen mode

};

class CarInfo
{
private:
flyweight* m_flyweight_ = nullptr;
uniqueState* m_unique_state_;

public:
CarInfo(flyweight* flyweight, uniqueState* unique_state)
: m_flyweight_(flyweight), m_unique_state_(unique_state)
{
}

void operation()
{
    m_flyweight_->operation(*m_unique_state_);
}
Enter fullscreen mode Exit fullscreen mode

};

include

class policeDatabase
{
private:
list car_infos_;
public:
~policeDatabase()
{
for (auto item : car_infos_)
{
delete item;
}
}

void addcartoPolicedatabase(FlyweightFactory& ff, const string& woner, const string& plate, const string& brand,
                            const string& color, const string& model)
{
    flyweight* flyweight = ff.getFlyweight({brand, model, color});
    uniqueState unique_state(woner, plate);
    car_infos_.push_back(new CarInfo(flyweight, &unique_state));
    for (auto item : car_infos_)

        item->operation();
}
Enter fullscreen mode Exit fullscreen mode

};

int main()
{
FlyweightFactory factory({
ShareState("an", "ax", "red"),
ShareState("ax", "ddd", "ff")
});
cout << "\n----------------------------------\n";
factory.listflyw();
cout << "\n----------------------------------\n";

policeDatabase database;
database.addcartoPolicedatabase(factory, "xx", "xx", "xx", "xx", "xx");
cout << "\n----------------------------------\n";

factory.listflyw();
cout << "\n----------------------------------\n";

database.addcartoPolicedatabase(factory, "yy", "yy", "an", "ay", "red");
cout << "\n----------------------------------\n";

factory.listflyw();
cout << "\n----------------------------------\n";

database.addcartoPolicedatabase(factory, "zz", "zz", "an", "ay", "red");
cout << "\n----------------------------------\n";

factory.listflyw();
Enter fullscreen mode Exit fullscreen mode

}

// ConsoleApplication2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/**

include

class a
{
public:

};

class b:public a
{
public:

};

int main()
{
int* p;
if(typeid(int*)==typeid(p))
{
std::cout << "equal";
}
a x;
a y;
if(typeid(x)!=typeid(y))
{

    std::cout << "not ii";
}
Enter fullscreen mode Exit fullscreen mode

}*/

include

using namespace std;

class A;
class B;
class C;
class D;
class E;

class Base
{
public:
class IVisitor
{
public:
virtual void visit(A*) = 0;
virtual void visit(B*) = 0;
virtual void visit(C*) = 0;
virtual void visit(D*) = 0;
virtual void visit(E*) = 0;
};

virtual void say() = 0;
virtual void accept(IVisitor*) = 0;

virtual ~Base()
{
}
Enter fullscreen mode Exit fullscreen mode

};

class A : public Base
{
public:
void say() override
{
cout << "Class A" << endl;
}

void accept(IVisitor* vis) override
{
    vis->visit(this); // 匹配数据操作类中的重载函数
}
Enter fullscreen mode Exit fullscreen mode

};

class B : public Base
{
public:
void say() override
{
cout << "Class B" << endl;
}

void accept(IVisitor* vis) override
{
    vis->visit(this);
}
Enter fullscreen mode Exit fullscreen mode

};

class C : public Base
{
public:
void say() override
{
cout << "Class C" << endl;
}

void accept(IVisitor* vis) override
{
    vis->visit(this);
}
Enter fullscreen mode Exit fullscreen mode

};

class D : public Base
{
public:
void say() override
{
cout << "Class D" << endl;
}

void accept(IVisitor* vis) override
{
    vis->visit(this);

}
Enter fullscreen mode Exit fullscreen mode

};

class E : public Base
{
public:
void say() override
{
cout << "Class E" << endl;
}

void accept(IVisitor* vis) override
{
    vis->visit(this);
}
Enter fullscreen mode Exit fullscreen mode

};

class calcVisitor : public Base::IVisitor
{
// 数据操作类
public:
calcVisitor(int& x) : x(x)
{
}

void visit(A* obj) override
{
    x *= 2;
}

void visit(B* obj) override
{
    x -= 3;
}

void visit(C* obj) override
{
    x += 6;
}

void visit(D* obj) override
{
    x /= 3;
}

void visit(E* obj) override
{
    x -= 2;
}
Enter fullscreen mode Exit fullscreen mode

private:
int& x;
};

int main()
{
// 访问者模式实现, 类型->功能(补充知识: 解决新增功能维护难——通过让编译器提示改代码)
srand(time(0));
Base* p[5] = {nullptr};
for (int i = 0; i < 5; ++i)
{
// 第一次类指针类型转换
switch (rand() % 5)
{
case 0: p[i] = new A();
break;
case 1: p[i] = new B();
break;
case 2: p[i] = new C();
break;
case 3: p[i] = new D();
break;
case 4: p[i] = new E();
break;
}
}
int x = 1;
calcVisitor vis(x);
for (int i = 0, pre = x; i < 5; ++i)
{
p[i]->accept(&vis); // 第二次类指针类型转换
p[i]->say();
cout << pre << " -> " << x << endl;
pre = x;
}
return 0;
}

//// ConsoleApplication31.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
////
//
//#include
//class a
//{
//public:
// a(int m,int n):i(m),j(n){}
// int i;
// int j;
// void print()
// {
// std::cout << "Hello World!\n";
//
// }
//};
//void fun(std::shared_ptr f)
//{
//}
//
//int main()
//{
// std::unique_ptr
f(new a(2, 4));
// f->print();
// fun(std::make_shared
(3, 4));
// std::shared_ptr
dd = std::make_shared(2, 3);
// std::shared_ptr
ff = dd;
//
// std::cout << (*ff).i;
//}
//
//// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
//// 调试程序: F5 或调试 >“开始调试”菜单
//
//// 入门使用技巧:
//// 1. 使用解决方案资源管理器窗口添加/管理文件
//// 2. 使用团队资源管理器窗口连接到源代码管理
//// 3. 使用输出窗口查看生成输出和其他消息
//// 4. 使用错误列表窗口查看错误
//// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。

include

include

include

class AbstractHero {
public:
virtual void showStatus() = 0;
int mHp, mMp, mAt, mDf;
};

class HeroA :public AbstractHero {
public:
HeroA() {
mHp = 0, mMp = 0, mAt = 0, mDf = 0;
}
virtual void showStatus() {
std::cout << "血量:" << mHp << std::endl;
std::cout << "魔法:" << mMp << std::endl;
std::cout << "攻击:" << mAt << std::endl;
std::cout << "防御:" << mDf << std::endl;
}
};

//英雄穿上某个装饰物,那么也还是一个英雄
class AbstractEquipment : public AbstractHero {
public:
AbstractEquipment(AbstractHero* hero) {
pHero = hero;
}
virtual void showStatus() {}
AbstractHero* pHero;
};

//给英雄穿上狂徒铠甲
class KuangtuEquipment :public AbstractEquipment {
public:
KuangtuEquipment(AbstractHero* hero) :AbstractEquipment(hero) {}
//增加新的功能
void AddKuangtu() {
std::cout << "新英雄穿上狂徒之后" << std::endl;
this->mHp = this->pHero->mHp;
this->mMp = this->pHero->mMp;
this->mAt = this->pHero->mAt;
this->mDf = this->pHero->mDf + 30;
}
virtual void showStatus() {
AddKuangtu();
std::cout << "血量:" << mHp << std::endl;
std::cout << "魔法:" << mMp << std::endl;
std::cout << "攻击:" << mAt << std::endl;
std::cout << "防御:" << mDf << std::endl;
}
};

int main() {

AbstractHero* hero = new HeroA;
hero->showStatus();
std::cout << "------------------------" << std::endl;
//给英雄穿上狂徒
hero = new KuangtuEquipment(hero);
hero->showStatus();

return 0;
Enter fullscreen mode Exit fullscreen mode

}

// ConsoleApplication32.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

include

include

include

include

include

using namespace std;

//
class Company
{
public:
virtual string getInfo() = 0;

virtual string getName()
{
    return name;
}

virtual string getType() = 0;
Enter fullscreen mode Exit fullscreen mode

protected:
string name;
string position;
int salary;
};

class ConcreteCompany : public Company
{
public:
ConcreteCompany(string name, string position, int salary)
{
this->name = name;
this->position = position;
this->salary = salary;
}

void add(Company* company)
{
    shared_ptr<Company> temp(company);
    companyList.push_back(temp);
}

string getType()
{
    return "ConcreteCompany";
}

void remove(string companyName)
{
    list<shared_ptr<Company>>::iterator iter = companyList.begin();
    for (; iter != companyList.end(); iter++)
    {
        if ((*iter).get()->getName() == companyName)
        {
            companyList.erase(iter);
            return;
        }
    }
}

list<shared_ptr<Company>> getChildList()
{
    return companyList;
}

string getInfo()
{
    string info = "";
    info = "名称:" + this->name;
    info = info + "\t职位:" + this->position;
    info = info + "\t薪水:" + to_string(this->salary);
    return info;
}
Enter fullscreen mode Exit fullscreen mode

private:
list> companyList;
};

class Employee : public Company
{
public:
Employee(string name, string position, int salary)
{
this->name = name;
this->position = position;
this->salary = salary;
}

string getType()
{
    return "Employee";
}

string getInfo()
{
    string info = "";
    info = "名称:" + this->name;
    info = info + "\t职位:" + this->position;
    info = info + "\t薪水:" + to_string(this->salary);
    return info;
}
Enter fullscreen mode Exit fullscreen mode

};

void disPlay(ConcreteCompany* root)
{
cout << root->getInfo() << endl;
list> tmp = root->getChildList();
list>::iterator iter = tmp.begin();
for (; iter != tmp.end(); iter++)
{
if ((iter).get()->getType() == string("Employee"))
{
cout << (*iter).get()->getInfo() << endl;
}
else
{
//递归
disPlay((ConcreteCompany
)(*iter).get());
}
}
}

int main()
{
ConcreteCompany* root = new ConcreteCompany("张三", "CEO", 100000);
ConcreteCompany* develop = new ConcreteCompany("李四", "研发组长", 100000);
ConcreteCompany* sale = new ConcreteCompany("王二", "销售组长", 100000);
Employee* e1 = new Employee("A", "研发", 200);
Employee* e2 = new Employee("B", "销售", 200);
Employee* e3 = new Employee("C", "研发", 200);
Employee* e4 = new Employee("D", "销售", 200);
root->add(develop);
root->add(sale);
develop->add(e1);
develop->add(e3);
sale->add(e2);
sale->add(e4);
disPlay(root);
develop->remove("A");
disPlay(root);
delete root;
root = NULL;
}

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay