Lab5 Yves Conselvan

aluno: Yves
ano/sem: 2008/2o.
data do laboratório (num. da semana) : …

Introdução

Neste laboratório nossa tarefa foi terminar a implementação de uma aplicação servidor de bolão online em ruby. Na execução do trabalho treinamos a aplicação do padrão decorator.

Desenvolvimento

Implementação da classe MatchThreadSafeDecorator para deixar os métodos make_bet e finalize thread safe.

def make_bet(*args)
      synchronize do
        @decorated.make_bet(*args)
      end
    end
 
    def finalize(*args)
      synchronize do
        @decorated.finalize(*args)
      end
    end

Implementação da classe MatchListThreadSafeDecorator de forma que os novos Match's criados tenha o decorator MatchThreadSafeDecorator.

def initialize(decorated)
      old_match_decorator = decorated.item_decorator
      decorated.item_decorator = lambda do |match|
        MatchThreadSafeDecorator.new( old_match_decorator.call(match) )
      end
      super(decorated)
    end

Implementação da classe MatchPersistanceDecorator para fazer com que os métodos make_bet e finalize persistam as alterações.

def initialize(obj, match_list)
        super(obj)
       @match_list = match_list
     end
 
    def make_bet(*args)
        @decorated.make_bet(*args)
         @match_list.save
    end
 
    def finalize(*args)
      @decorated.finalize(*args)        
       @match_list.save
    end

Implementação da classe MatchListPersistanceDecorator de forma que os novos Match's criados tenha o decorator MatchPersistanceDecorator.

def initialize(obj, filename)
        super(obj, filename)
         @filename = filename
        old_match_decorator = obj.item_decorator
              obj.item_decorator = lambda do |match|
                MatchPersistanceDecorator.new( old_match_decorator.call(match) , self )
            end
        end

Implementação da classe MatchListBuilder com as possibilidades de utilização conjunta de decorator's sobre um objeto da classe MatchList

def initialize
        @match_list = MatchList.new
    end
 
    def add_persistance
        @added_persistance = true
        @match_list = Decorators::MatchListPersistanceDecorator.new(@match_list, 'matchs.yml')
    end
 
    def add_logging
        @match_list = Decorators::MatchListLoggerDecorator.new(@match_list)
    end
 
    def add_thread_safety
        @match_list = Decorators::MatchListThreadSafeDecorator.new(@match_list)
    end
 
    def add_all
        add_persistance
        add_logging
        add_thread_safety
    end
 
    def match_list
        @match_list.load_list if @added_persistance
        @match_list
    end

Implementação da classe UserListBuilder com as possibilidades de utilização conjunta de decorator's sobre um objeto da classe UserList

def initialize
        @user_list = UserList.new
    end
 
    def add_persistance
        @added_persistance = true
        @user_list = Decorators::ListPersistanceDecorator.new(@match_list, 'users.yml')
    end
 
    def add_logging
        @user_list = Decorators::UserListLoggerDecorator.new(@match_list)
    end
 
    def add_thread_safety
        @user_list = Decorators::ListThreadSafeDecorator.new(@match_list)
    end
 
    def add_all
        add_persistance
        add_logging
        add_thread_safety
    end
 
    def user_list
        @user_list.load_list if @added_persistance
        @user_list
    end

Execução dos testes

teste.jpg

Conclusão

Add a New Comment
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License