2013-06-05 3 views
-1

Допустим, у меня есть приложение x, которое часто обновляется, и мне нужно изменить это приложение с помощью моего пакета y.Переопределение классов

Чтобы получить мой пакет, y, running Я изменяю один из основных классов в x (есть ли лучший способ сделать это?). Я пытаюсь сделать как можно меньше изменений после этого. Я делаю это, потому что, когда x обновлениях, я могу просто просто скопировать в моих модификациях, добавить вызов y, и мы уходим.

Теперь я столкнулся с проблемой, мне нужно изменить рендеринг шрифтов x, чтобы использовать более тонкий шрифт ttf, это приведет к модификации целого класса по x.

Есть ли способ переопределить класс, содержащийся в x в y без ссылки на y в x? Я имею в виду, удаляя весь класс по й и ее замене продолжается, но что бы дополнительная нагрузка на моей голове, когда х обновляется

Спасибо заранее, Jordan

+3

Можете ли вы свернуть свой код до короткого примера? Я не знаю, о чем вы говорите прямо сейчас ... – jlordo

+0

Мне нужно заменить класс, который позволяет называть это A классом B без ссылки на B в A @jlordo –

+1

Я не уверен, что 'A' и' B' являются любыми более понятными, чем 'x' и' y'. – GriffeyDog

ответ

0

вы делаете что-то вдоль линий этого :

public class x{ some schtuff} 

тогда вы сделаете это:

Public class y extends x { other stuff} 

Надеется, что это помогает, мой сыну был такая же проблема!

3

Вы описали свою проблему в очень общих терминах, поэтому я могу только ответить в целом. Вы должны взглянуть на различные структуры структуры. facade pattern предназначен для изоляции кода в одном разделе программы (пакет y) от изменений в другой (пакет x). Для многих изменений x вам просто нужно обновить фасад, и ничего больше в пакете y не нужно изменять.

Связанные модели: adapter pattern и decorator pattern.

Учитывая то, что вы описали, я предлагаю избегать подкласса. Это создает гораздо больше зависимости, чем кажется.

+0

Есть ли способ переопределить класс, не инициализируя его в первую очередь? Я считаю, что использование фасада очень близко к тому, что мне нужно, но это потребует редактирования базового пакета. –

+0

@JordanDoyle - Идея шаблона фасада заключается в том, что вам не нужно вообще изменять код поддержки (пакет x). (Или вы говорите об изменении пакета y?) Когда вы переопределяете класс, конструктор базового класса всегда вызывается (явно или неявно) как первый шаг при выполнении каждого конструктора производного класса. Итак, если я понимаю ваш вопрос: нет, нет возможности переопределить класс, не инициализируя его сначала. Шаблон фасада также помогает в этом: вы можете отложить инициализацию членов класса до тех пор, пока вы их не инициализируете. –

+0

Пакет X, исходный код поддержки, уже имеет фасад, и мой код вызывается позже в выполнении сценария, но способ, которым работает обратный код, заключается в том, что он передает класс, который мне нужно переопределить как параметр для других классов, поэтому к моменту времени мой пакет называется его слишком поздно –

Смежные вопросы