私は飲み物タイプのプログラムを注文しています。私はオブザーバーパターンを実装するtryigですので、携帯電話/オブザーバーが注文を表示すると、基本的に彼らにアップデートを知らせるようになります。オブザーバーの更新に関するヘルプが必要です。
私はちょうどこれを行う方法がわかりません。私がTheOrderクラスをupdate()orderクラスに渡すと、エラーが発生します。ここ
は私のオブザーバークラスです..更新()オブザーバーと携帯電話でとTheOrderクラスにあるを投稿するにはあまりにも多く:ここ#ifndef _OBSERVER_
#define _OBSERVER_
#include <string>
//#include "TheOrder.h"
namespace CoffeeHouse {
namespace Observers {
//class Subject;
class Observer {
protected: virtual ~Observer() = 0 {
};
public:
// virtual
virtual void update()= 0;
};
} // namespace Observer
} // namespace HeadFirstDesignPatterns
#endif
オブザーバー具象クラスです
#ifndef _CELLPHONE1_
#define _CELLPHONE1_
#include <iostream>
using namespace std;
namespace CoffeeHouse {
namespace Observers {
class CellPhone1: public Observer {
public:
std::string _number;
CellPhone1(std::string number){
_number = number;
}
void update()
{
std::cout << "BUZZZZZZZ - CellPhone #" << _number << " your order is ready " << endl;
}
};
} // namespace Observer
} //
#endif
は、ここでは対象クラス
#ifndef _SUBJECT_
#define _SUBJECT_
#include "Starbuzz.h"
//#include "Starbuzz2.h"
#include "Observer.h"
#include <list>
#include "Beverage.h"
namespace CoffeeHouse {
namespace Observers {
class Subject {
protected: virtual ~Subject() = 0 {
};
public: virtual void registerObserver(Observer* o) = 0;
public: virtual void removeObserver(Observer* o) = 0;
public: virtual void notifyObservers() = 0;
};
} // namespace Observer
}
#endif
は、ここでは被験者具象クラスです
ここ#ifndef _THE_ORDER_
#define _THE_ORDER_
#include "Beverage.h"
#include <list>
#include <iostream>
#include "Order.h"
#pragma once;
//class Order;
using namespace CoffeeHouse::Decorator;
namespace CoffeeHouse {
namespace Observers {
class TheOrder : public Subject {
private: mutable std::list< Observer* > _observers;
private: mutable std::list< Order* > _orders;
//public: virtual ~Order() = 0
//public: ~TheOrder();
public: void NewOrder(Beverage* bev, Observer* cellphone)
{
// _orders.push_front(new Order(bev, cellphone));
//_//observers.push_front(new Order(bev));
}
public: void registerObserver(Observer* o) { assert(o);
_observers.push_back(o);
}
public: void removeObserver(Observer* o) { assert(o);
_observers.remove(o);
}
public: void notifyObservers() {
for(std::list< Observer* >::iterator iterator = _observers.begin(); _observers.end() != iterator; ++iterator) {
Observer* observer = *iterator;
observer->update();
}
}
};
//}
} // namespace Observer
} // namespace CoffeeHouse
#endif
オブザーバー具象クラスが
#include "Starbuzz.h" //just header files
#include "Starbuzz2.h" // just header files
#include "Subject.h"
#include "TheOrder.h"
#include "CellPhone2.h"
#include "CellPhone1.h"
using namespace CoffeeHouse::Decorator;
using namespace CoffeeHouse::Observers;
int main(int argc, char* argv[])
{
Beverage* beverage2 = new DarkRoast();
beverage2 = new Mocha(beverage2);
beverage2 = new Mocha(beverage2);
beverage2 = new Whip(beverage2);
std::cout << "Current Orders: " << endl;
std::cout << beverage2->getDescription()
<< " $"
<< beverage2->cost()
<< std::endl;
Beverage* beverage3 = new HouseBlend();
beverage3 = new Soy(beverage3);
beverage3 = new Mocha(beverage3);
beverage3 = new Whip(beverage3);
std::cout << beverage3->getDescription()
<< " $"
<< beverage3->cost()
<< std::endl;
delete beverage3;
delete beverage2;
//delete beverage;
Bagel* bagel = new Plain();
std::cout.setf(std::ios::showpoint);
std::cout.precision(3);
std::cout << bagel->getDescription()
<< " $"
<< bagel->cost()
<< std::endl;
Bagel* bagel2 = new Raisen();
bagel2 = new Myhummus(bagel2);
bagel2 = new SesemeSeed(bagel2);
bagel2 = new CreameCheese(bagel2);
std::cout << bagel2->getDescription()
<< " $"
<< bagel2->cost()
<< std::endl;
Bagel* bagel3 = new Onion();
bagel3 = new Myhummus(bagel3);
bagel3 = new SesemeSeed(bagel3);
bagel3 = new CreameCheese(bagel3);
std::cout << bagel3->getDescription()
<< " $"
<< bagel3->cost()
<< std::endl;
TheOrder* orders = new TheOrder();
CellPhone1* cellphone1 = new CellPhone1("1");
orders->registerObserver(cellphone1);
orders->notifyObservers();
TheOrder* order = new TheOrder();
CellPhone1* obj2 = new CellPhone1("3");
order->registerObserver(obj2);
order->notifyObservers();
return 0;
}
)(メイン
#ifndef _CELLPHONE1_
#define _CELLPHONE1_
#include <iostream>
using namespace std;
namespace CoffeeHouse {
namespace Observers {
class CellPhone1: public Observer {
public:
std::string _number;
CellPhone1(std::string number){
_number = number;
}
void update()
{
std::cout << "BUZZZZZZZ - CellPhone #" << _number << " your order is ready " << endl;
}
};
} // namespace Observer
} //
#endif
である私はちょうど私が、それぞれ異なる順序を表示することができるようにcellphone1クラスにオーダーを送りたい..私私は更新機能を介してそれを送信する必要があると思う..
cellphone1はオブザーバーなので、そこに..
TheOrderクラスには、このポインタを渡す必要があるnotifyObservers()関数がありますか?また
これはあなただけで投稿同じ質問はありませんか?私たちはあなたのコードの**すべて**を読んでほしくなかったが、まだしていない。投稿するコードの量を減らす必要があるため、質問がはっきりと簡潔になります。実際の質問とは関係のないコードをすべて削除します。 – JaredC
icelated - 私にはADHDがあります。驚くほど興味深い問題で私を掃除することができない限り、また別のオブザーバの実装はそうではありません。あなたが私を助けてくれるようにしたいのであれば、質問を短く、明確にする必要があります。それが立っているので、単に私にとっては不可能です。 –
私が投稿したすべてのコードはあなたが見る必要があるコードです。別のクラスに複数のアップデートがある場合、どうすればいいですか? –