Паттерн: Приспособленец (Flyweight)
Исходник: HtmlTag.java, язык: java [code #470, hits: 6325]
автор: this [добавлен: 01.09.2007]
  1. package flyweight;
  2.  
  3. public class HtmlTag {
  4. private String name;
  5.  
  6.  
  7. /**
  8. * Конструктор - protected, чтобы запретить
  9. * прямое инстанцирование данного экземпляра
  10. * (не делая при этом класс абстрактным)
  11. * @param name
  12. */
  13. protected HtmlTag(String name) {
  14. this.name = name;
  15. }
  16.  
  17. /**
  18. * Выводим html-представление данного тега
  19. * @param content - внутренний содержимое(текст) тега
  20. * @param context - контекст со всей необходимой для
  21. * отображения информацией.
  22. */
  23. public String Output(String content, TagContext context) {
  24. String res = "<" + getName() + " style=\"" + GetStyle(context) + "\">";
  25. res += content;
  26. res += "</" + getName() + ">";
  27. return res;
  28. }
  29.  
  30. public String getName() {
  31. return name;
  32. }
  33.  
  34. public void setName(String name) {
  35. this.name = name;
  36. }
  37.  
  38. public CssStyle GetStyle(TagContext context) {
  39. return context.getStyle();
  40. }
  41.  
  42. public void SetStyle(CssStyle newStyle, TagContext context) {
  43. context.setStyle(newStyle);
  44. }
  45.  
  46. // Методы hashCode/equals здесь очень актуальны,
  47. // поскольку объекты данного типа используются в
  48. // в коллекциях
  49. public int hashCode() {
  50. final int PRIME = 31;
  51. int result = 1;
  52. result = PRIME * result + ((name == null) ? 0 : name.hashCode());
  53. return result;
  54. }
  55.  
  56. public boolean equals(Object obj) {
  57. if (this == obj)
  58. return true;
  59. if (!(obj instanceof HtmlTag))
  60. return false;
  61.  
  62. final HtmlTag other = (HtmlTag) obj;
  63. if (name == null) {
  64. if (other.name != null)
  65. return false;
  66. } else if (!name.equals(other.name))
  67. return false;
  68. return true;
  69. }
  70.  
  71.  
  72. }
  73.  
Сущность Flyweight

Базовый функционал, родительский класс всех тегов.
Тестировалось на: java 1.5.0_04

+добавить реализацию