
flymithra
05.02.2017
16:18:13

marat
05.02.2017
16:19:58
работа с уточкой не должна отличаться от работы с утками

Google

marat
05.02.2017
16:20:28
поэтому это не стратегия
и не композиция, ибо оверхед для уток

flymithra
05.02.2017
16:21:36

marat
05.02.2017
16:22:00
"Есть утка, которая крякает и плавает. Ученые создали искусственную утку, которая может искусственно крякать, искусственно плавать.
Как сделать уточку, которая будет искусственно плавать и крякать по-настоящему, без трех реализаций абстрактного класса уточки"
» искусственно плавать и крякать по-настоящему
в вашей реализации, уточка не умеет ни плавать, ни крякать
постановка задачи корректна, реализация нет
ps в реальности я бы делал третью реализацию интерфейса


Daniil
05.02.2017
16:27:48
Ну можно вот так извратиться:
abstract Strategy
{
public act()
}
RealKryaStrategy extends Strategy{
public act(){
}
}
FakeKryaStrategy extends Strategy{
public act(){
}
}
RealSwimStrategy extends Strategy{
public act(){
}
}
FakeSwimStrategy extends Strategy{
public act(){
}
}
class Utka()
public set swimStrategy(str:Strategy)
{
this.swimStrategy = str;
}
public set kryaStrategy(str:Strategy)
{
this.swimStrategy = str
}
public swim()
{
this.swimStrategy.act();
}
public krya()
{
this.kryaStrategy.act();
}
}

Vladimir
05.02.2017
16:28:16

Daniil
05.02.2017
16:28:51

Nikita
05.02.2017
16:28:57

Daniil
05.02.2017
16:29:05
само по себе сишком извращенно для этого случая

Google

Vladimir
05.02.2017
16:29:43

Daniil
05.02.2017
16:30:04
interface для метода act
если уж по полной

Vladimir
05.02.2017
16:30:28
Сам класс стратегии не несет в себе смысла, потому что его содержимое - действие. Что как бы не совпадает с названием

Daniil
05.02.2017
16:30:28
чутка перепутал - поправил

marat
05.02.2017
16:31:15

Daniil
05.02.2017
16:31:31
сразу ф-ция действия
и никаких проблем

Vladimir
05.02.2017
16:32:23
Класс Strategy неочевиден

Daniil
05.02.2017
16:33:28

marat
05.02.2017
16:33:43

flymithra
05.02.2017
16:34:03
Я правда не понимаю до конца вашей задачи скорее всего, ну как бы зачем мутить так воду, если я могу создавать каких мне угодно уток так (
ДАВАЙТЕ УЖЕ ВЕРНОЕ РЕШЕНИЕ В СТУДИЮ НЕ ТОМИТЕ
public class Utka {
boolean kra, swi;
public Utka (boolean kra, boolean swi) {
this.kra = kra;
this.swi = swi;
}
}

Daniil
05.02.2017
16:35:52

marat
05.02.2017
16:36:19

Daniil
05.02.2017
16:37:08
Автор, ты сам то помнишь правильный ответ?)

Nikita
05.02.2017
16:45:55
class QuackStrategy {
abstract doQuack();
}
class RealQuackStrategy : QuackStrategy{
doQuack(){ /* do real quack*/ }
}
class FakeQuackStrategy : QuackStrategy{
doQuack(){ /* do fake quack*/ }
}
///по аналогии - SwimStrategy, с соответствующими реализациями real и fake
class Duck {
private QuackStrategy quack;
private SwimStrategy swim;
Duck(QuackStrategy _quack, SwimStrategy _swim) {
this.quack = _quack;
this.swim = _swim;
}
doQuack() {
this.quack.doQuack();
}
doSwim() {
this.quack.doSwim();
}
}
не автор, но вот правильный ответ

Daniil
05.02.2017
16:46:36

Google

Nikita
05.02.2017
16:46:39
верно
если не считать слишком обобщенного класса Strategy, который нафиг не нужен - ты был близок

Daniil
05.02.2017
16:47:23
Та хорош) Нужен единый предок

Nikita
05.02.2017
16:47:30
нет

Lends
05.02.2017
16:47:35
что-то вы от ангуляра отдалились... го лучше конкурс на самую большую директиву

Daniil
05.02.2017
16:47:38
Чтобы мог обращаться к методу act()

Nikita
05.02.2017
16:48:10
и зачем?

Daniil
05.02.2017
16:48:23
чтобы код красивее был
и все
по сути не нужен

Nikita
05.02.2017
16:48:33
красивее - когда читабельнее
а act слишком обобщенный
doQuack и doSwim понятнее

Daniil
05.02.2017
16:49:20
swimStrategy.act() - исчерпывающая информация
swimStrategy.doSwim() - все равное что mycomponent.component
:)
ну, короче, я бы так сделал. А правильно это или нет - дело второе


Vladimir
05.02.2017
16:50:44
Я тут покурить вышел, а потом залип на ерроры шарповские.
Но вот:
using System;
public class Program {
public static void Main(string[] args) {
var duck = new Duck(new NativeCrackStrategy(), new FakeSwimStrategy());
duck.Crack();
duck.Swim();
}
public interface ICrackStrategy {
void Crack();
}
public interface ISwimStrategy {
void Swim();
}
public class Duck {
private ICrackStrategy _crackStrategy;
private ISwimStrategy _swimStrategy;
public Duck(ICrackStrategy crack, ISwimStrategy swim) {
this._crackStrategy = crack;
this._swimStrategy = swim;
}
public void Crack() {
this._crackStrategy.Crack();
}
public void Swim() {
this._swimStrategy.Swim();
}
}
public class NativeCrackStrategy: ICrackStrategy {
public void Crack() {
Console.WriteLine("crack like a native");
}
}
public class FakeCrackStrategy: ICrackStrategy {
public void Crack() {
Console.WriteLine("crack like a fake");
}
}
public class NativeSwimStrategy: ISwimStrategy {
public void Swim() {
Console.WriteLine("swim like a native");
}
}
public class FakeSwimStrategy: ISwimStrategy {
public void Swim() {
Console.WriteLine("swim like a fake");
}
}
}


flymithra
05.02.2017
16:50:57
Ну мда

Google

Daniil
05.02.2017
16:51:33
Ну мда
Задачки чаще всего абсурдны

Vladimir
05.02.2017
16:51:38

Daniil
05.02.2017
16:51:43
и мало применимы к реальности

Nikita
05.02.2017
16:51:53

Vladimir
05.02.2017
16:52:17
и фабрики

Daniil
05.02.2017
16:52:34

flymithra
05.02.2017
16:52:40
Писать класс для метода, т.е. метод-класс, что? По моему это противоречит ООП

Vladimir
05.02.2017
16:53:38

Nikita
05.02.2017
16:54:16

flymithra
05.02.2017
16:54:22
>не забывай, что у тебя сейчас задача
Хорошо


Vladimir
05.02.2017
16:55:34
Смотри, ты передаешь всего функцию

Nikita
05.02.2017
16:55:59

Daniil
05.02.2017
16:56:05
Я и говорю, что в реальности для реаизации подобного я бы не стал делать то же, что сделал для этой задачи. А не то что factory и т.п. не применимы к реальности, как решил передернуть Вадимир

Vladimir
05.02.2017
16:56:40
Что, если в нашей стратегии будет ветвление?
И там уже одной функции не будет, стратегия будет нести в себе определенные свойства

flymithra
05.02.2017
16:56:42
Смотри, ты передаешь всего функцию
Я понял, как ты сделал, пояснять не нужно, это напоминает мне историю, где чувака в тестовом задании физбаз попросили написать, а он обучил нейронку

Vladimir
05.02.2017
16:56:53

flymithra
05.02.2017
16:58:05

Vladimir
05.02.2017
16:58:07
Палка о двух концах, задача эта с собеседования.
С одной стороны - хуйнем функцию и ок.
А что если этот код надо будет поддерживать?

Google

Daniil
05.02.2017
16:58:46
KISS

Vladimir
05.02.2017
16:59:08
И если кандидат подумает об этом "если" - шанс на оффер выше
Если ты конечно не гребцом на галеру идешь

Daniil
05.02.2017
17:02:35
Кто-нибудь работал Angular2 + Firebase?

Lends
05.02.2017
17:03:21
а если всё время думать о "если", можно закончить в бесконечной premature optimisation

Daniil
05.02.2017
17:05:00

Lends
05.02.2017
17:05:46
да я чисто вбросить... не читал даже о чём речь))

Daniil
05.02.2017
17:06:12

Vladimir
05.02.2017
17:06:18
а когда у тебя суровый прод
у которого еще 2 года развития впереди

Lends
05.02.2017
17:07:28
Просто ООП оно как бы по такой интерпрайз, когда у тебя есть ТЗ и оно не меняется.... один раз подумал, всё написал

Daniil
05.02.2017
17:07:32
лучше быть где-то посередине. Особенно если спек часто меняется

Vladimir
05.02.2017
17:07:38

Lends
05.02.2017
17:07:40
а в реале очень часто всё и вся меняется

Daniil
05.02.2017
17:08:04

Lends
05.02.2017
17:08:17
и как не изворачивайся, есть шанс переписать то, что раньше казалось гениальным и гибким

Daniil
05.02.2017
17:08:34
Вывод - пока можешь - делай просто. Усложнить время будет

Lends
05.02.2017
17:08:52
так что частенько если это не core, особо заморачиваться не стоит

H
05.02.2017
19:33:26
Всем привет! Подскажите, плиз, как работать с BehaviorSubject?
http://stackoverflow.com/questions/42055888/work-with-a-global-variable-initialized-via-behaviorsubject-angular2/42055905#42055905
Эта группа больше не существует