Шаблон "одиночка" - сомневается в Главной Первой книге Шаблонов разработки

С новым AppCompatActivity вы должны вызывать его вместо ActionBarActivity:

((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
6
задан alonzo 30 May 2013 в 15:50
поделиться

4 ответа

Проблема возникает только в том случае, если может быть только один ChocolateBoiler, а если может быть только один, то он должен быть одноэлементным.

2
ответ дан 17 December 2019 в 02:33
поделиться

The question isn't about making an instance of an object.

It's about the confusion caused by having two instances of the object, both of which purport to have the status of the ChocolateBoiler.

If some Object (for example, Cooker) thinks it has the status of the ChocolateBoiler, and some other Object (for example, Recipe) things it has the status of the ChocolateBoiler, what happens now?

Since the variables are instance variables, the ChocolateBoiler objects won't agree on the status of the ChocolateBoiler. Now what happens?

2
ответ дан 17 December 2019 в 02:33
поделиться

Я думаю, в том примере у вас был только ОДИН котел для шоколада. Таким образом, вы должны иметь возможность создать только один экземпляр представляющего его объекта. Если бы вам было разрешено создавать несколько экземпляров, вы, возможно, выполнили бы команду if (boiler.hotEnough ()) boiler.stop () где-нибудь в вашей системе и были бы удивлены, что хотя бойлер уже работает слишком жарко, он не останавливается, потому что вы разговариваете с каким-то «мертвым» экземпляром Boiler, который возвращает hotEnough () : false.

Используя шаблон singleton, вы гарантируете, что независимо от того, где в в вашем коде вы говорите Boiler.getInstance (), вы получите единственный существующий объект котла, и когда вы затем поговорите с ним, он будет делать то, что вы ожидаете.

1
ответ дан 17 December 2019 в 02:33
поделиться

Весь пример с шоколадным котлом в одиночке обеспокоил меня много, пока я это читал.

На действительно фундаментальном уровне, я не понимаю, почему это необходимо, когда у вас есть только одна физическая вещь, чтобы закрепить этот факт в программном обеспечении. Что будет, если вы получите еще один? что ты собираешься делать, добавить второй в тот же синглтон? сделать 2 разных синглтона? простая глобальная переменная подойдет.

ИМО, это не сам котел, от которого у вас может быть только одно, его доступ к элементам управления конкретным котлом. Вы не можете позволить второму человеку начать делать новую партию шоколада, пока он уже находится в процессе для кого-то другого, или даже позволить тому же человеку сделать вторую партию до того, как первая будет закончена. С этой точки зрения простая система очередей или пакетной обработки справилась бы с этой задачей. Используя другой шаблон из книги, шаблон команды был бы гораздо лучшим способом справиться с этим, поскольку есть только одна официантка, и все новые заказы ставятся в очередь, пока повар не закончит с текущим заказом еды. (эээ, если вы не видели книгу, то, что я только что сказал, может не иметь особого смысла, извините)

Может, я просто не понимаю сути. Раньше я мало занимался ООП или чем-то еще с шаблонами проектирования, и из-за этого теряю возможности трудоустройства, так что я читаю об этом.

1
ответ дан 17 December 2019 в 02:33
поделиться