用lambda簡化觀察者模式 observer

傳統的觀察者實現方式:

import java.util.ArrayList;
import java.util.List;

public class TestMaxBy {

    public static void main(String[] args) {
        Feeder feeder = new Feeder();
        feeder.collectAnimal(new Bear());
        feeder.collectAnimal(new Tiger());

        feeder.distributeAllAnimals("bolster");
    }
}

class Bear implements Animal{

    @Override
    public void distributeFood(String food) {
        System.out.println("I don't want to eat " + food);
    }
}

class Tiger implements Animal{

    @Override
    public void distributeFood(String food) {
        System.out.println("I want to eat " + food);
    }
}

interface Animal{
    void distributeFood(String food);
}

interface Subject{
    void collectAnimal(Animal animal);
    void distributeAllAnimals(String food);
}

class Feeder implements Subject{

    private List<Animal> animals = new ArrayList<>();

    @Override
    public void collectAnimal(Animal animal) {
        animals.add(animal);
    }

    @Override
    public void distributeAllAnimals(final String food) {
        animals.forEach(a -> a.distributeFood(food));
    }
}

使用lambda簡化觀察者設計模式:

import java.util.ArrayList;
import java.util.List;

public class TestMaxBy {

    public static void main(String[] args) {
        Feeder feeder = new Feeder();
        feeder.collectAnimal((food) -> System.out.println("I want to eat " + food));
        feeder.collectAnimal((food) -> System.out.println("I don't want to eat " + food));

        feeder.distributeAllAnimals("bolster");
    }
}

interface Animal{
    void distributeFood(String food);
}

interface Subject{
    void collectAnimal(Animal animal);
    void distributeAllAnimals(String food);
}

class Feeder implements Subject{

    private List<Animal> animals = new ArrayList<>();

    @Override
    public void collectAnimal(Animal animal) {
        animals.add(animal);
    }

    @Override
    public void distributeAllAnimals(final String food) {
        animals.forEach(a -> a.distributeFood(food));
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章