适配器模式:生成新的对象具备相同的方法

#代码示例
class Encrypter
  def encrypt(reader, writer)
    while not reader.eof?
      clear_char = reader.getc
      encrypted_char = clear_char.ord ^ 100
      writer.putc(encrypted_char)
    end
  end
end

reader = File.open("./message.txt")
writer = File.open("./message_encrypter.txt", "w")
encrypter = Encrypter.new
encrypter.encrypt(reader, writer)

如果要对字符串对象,那么这个字符串对象需要eof?和getc方法,下面就是实现的关于字符串的字符串适配器。

class Encrypter
  def encrypt(reader, writer)
    while not reader.eof?
      clear_char = reader.getc
      encrypted_char = clear_char.ord ^ 100
      writer.putc(encrypted_char)
    end
  end
end

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

reader = StringIoAdapter.new("this is the demo")
writer = File.open("./message_encrypter.txt", "w")
encrypter = Encrypter.new
encrypter.encrypt(reader, writer)

总结:和策略模式其实是一样,都是不同的对象实现了相同的方法,这个对象作为参数被放置到另外一种对象中。

系列模式:一个对象包含在另外一个对象之中,类似的模式还包括代理模式和装饰器模式。

results matching ""

    No results matching ""