适配器模式:生成新的对象具备相同的方法
#代码示例
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)
总结:和策略模式其实是一样,都是不同的对象实现了相同的方法,这个对象作为参数被放置到另外一种对象中。
系列模式:一个对象包含在另外一个对象之中,类似的模式还包括代理模式和装饰器模式。