Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Паттерны проектирования 4.1

Vitaly Shlyaga
November 23, 2012

Паттерны проектирования 4.1

Паттерн Адаптер.

Vitaly Shlyaga

November 23, 2012
Tweet

More Decks by Vitaly Shlyaga

Other Decks in Education

Transcript

  1. Адаптер Структурный шаблон проектирования, предназначенный для организации использования функций объекта,

    недоступного для модификации, через специально созданный интерфейс. пятница, 23 ноября 12 г.
  2. Адаптер class Encrypter def initialize(key) @key = key end def

    encrypt(reader, writer) key_index = 0 while not reader.eof? clear_char = reader.getc encrypted_char = clear_char ^ @key[key_index] writer.putc(encrypted_char) key_index = (key_index + 1) % @key.size end end end пятница, 23 ноября 12 г.
  3. Адаптер reader = File.open('message.txt') writer = File.open('message.encrypted','w') encrypter = Encrypter.new('my

    secret key') encrypter.encrypt(reader, writer) пятница, 23 ноября 12 г.
  4. Адаптер class StringIOAdapter def initialize(string) @string = string @position =

    0 end def getc if @position >= @string.length raise EOFError end ch = @string[@position] @position += 1 return ch end def eof? return @position >= @string.length end end пятница, 23 ноября 12 г.
  5. Адаптер-2 class Renderer def render(text_object) text = text_object.text size =

    text_object.size_inches color = text_object.color # выводим данные end end class TextObject attr_reader :text, :size_inches, :color def initialize(text, size_inches, color) @text = text @size_inches = size_inches @color = color end end пятница, 23 ноября 12 г.
  6. Адаптер-2 class BritishTextObject attr_reader :string, :size_mm, :colour # ... end

    class BritishTextObjectAdapter < TextObject def initialize(bto) @bto = bto end def text return @bto.string end def size_inches return @bto.size_mm / 25.4 end def color return @bto.colour end end пятница, 23 ноября 12 г.
  7. Адаптер-2 require 'british_text_object' class BritishTextObject def color return colour end

    def text return string end def size_inches return size_mm / 25.4 end end пятница, 23 ноября 12 г.
  8. Адаптер-2 bto = BritishTextObject.new('hello', 50.8, :blue) class << bto def

    color colour end def text string end def size_inches return size_mm/25.4 end end пятница, 23 ноября 12 г.
  9. Адаптер Простая идея — никакой магии. Соединяет два «несовместимых» объекта.

    В Ruby можно реализовать с помощью открытых классов. пятница, 23 ноября 12 г.
  10. Задача Необходимо реализовать систему получения информации от датчика температуры. Базовым

    классом является класс Sensor, который реализует метод get_temperature, который используется во всех библиотеках. Проблема в том, что в качестве датчика используется класс FahrenheitSensor, который возвращает температуру по шкале Фаренгейта. Необходимо реализовать адаптер, который бы позволили работать с подобными датчиками температуры. пятница, 23 ноября 12 г.