Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Сам объект про этот формат и его требования ничего не знает
- If it is a unary operator, implement it as a member function.
- If a binary operator treats both operands equally (it leaves them unchanged), implement this operator as a non-member function.
- If a binary operator does not treat both of its operands equally (usually it will change its left operand), it might be useful to make it a member function of its left operand’s type, if it has to access the operand's private parts.
В задней комнате находилось производство. Там стояли две дубовые бочки с манометрами и водомерными стеклами, одна — на полу, другая — на антресолях. Бочки были соединены тонкой клистирной трубкой, по которой, деловито журча, бежала жидкость. Когда вся жидкость переходила из верхнего сосуда в нижний, в производственное помещение являлся мальчик в валенках. Не по-детски вздыхая, мальчик вычерпывал ведром жидкость из нижней бочки, тащил ее на антресоли и вливал в верхнюю бочку. Закончив этот сложный производственный процесс, мальчик уходил в контору греться, а из клистирной трубки снова неслось всхлипыванье: жидкость совершала свой обычный путь — из верхнего резервуара в нижний.
А если делать как любят — «контроллер на страницу» — то получится очень даже похоже.
class DiffPage extends Page {
public void Launch () {
Register( new Blocks.MasksDescription() )
Register( new Blocks.SplitDiff( this.model ) )
Register( new Blocks.Comments( this.id ) )
}
}
Вот если рядом появятся методы AddComment, AddDiff и AddMask — которые будут дублироваться на каждой второй странице
Это — код страницы, а не контроллера
#include <iostream>
using namespace std;
//объект воздействия
class Terminal
{
public:
static void promptLogin();
};
void Terminal::promptLogin()
{
cout << "Prompt login";
}
//полтергейст
class Controller
{
public:
void startLogin();
};
void Controller::startLogin()
{
Terminal::promptLogin();
}
//субъект действия
class User
{
public:
void doLogin();
};
void User::doLogin()
{
Controller controller; //время жизни заканчивается в doLogin
controller.startLogin();
}
int main()
{
User user;
user.doLogin();
return 0;
}
class NumberAdder {
private final int a;
private final int b;
public NumberAdder(int a, int b) {
this.a = a;
this.b = b;
}
public int addNumbers() {
return a + b;
}
}
// в вызывающем коде:
...
NumberAdder numberAdder = new NumberAdder(2, 3);
int result = numberAdder.addNumbers();
// или даже:
...
int result = new NumberAdder(2, 3).addNumbers();

Антипаттерны проектирования: Poltergeists