【java】观察者模式

文章介绍了观察者模式在拍卖场景中的应用,如拍卖师通知所有竞价者价格变化。通过Auction类作为发布者,Competitor接口和Jack、Smith类作为订阅者,展示了如何实现实例中的对象改变(价格变化)时通知其他对象(竞价者)的机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

观察者:使用在存在一对多的关系场景,一个对象改变了,它会通知所有的依赖者,进行某一些更改。

观察者模式最直观的例子就是,拍卖师竞价者的一对多关系,这里拍卖师对多个竞价者,当竞价者给出最高价时,拍卖师就会通知所有的竞价者当前的价格

代码示例

1.创建一个”拍卖师

/**
 * 拍卖师
 */
public class Auction {
    //在场的所有竞价者
    private List<Competitor> competitors = new ArrayList<>();
    //当前最高价
    private int price;

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
        //在得知最高价的时候,马上通知所有的竞价者
        notifyCompetitor();
    }

    //添加竞价者
    public void addCompetitor(Competitor competitor) {
        competitors.add(competitor);
    }

    //通知所有竞价者,当前的最高价
    public void notifyCompetitor() {
        for (Competitor competitor : competitors) {
                competitor.getPrice();
        }
    }
}

2.创建一个竞价者接口(因为竞价者会有很多个,所以抽象出一个接口 )

 

/**
 * 抽象竞价者接口
 */
public interface Competitor {

    void getPrice();

}

3.创建两个竞价人(Jack和Smith)

 

/**
 * 具体竞价者:Jack
 */
public class Jack implements Competitor{
    //拍卖师
    private Auction auction;

    public Jack(Auction auction) {
        this.auction = auction;
        //把当前竞价者记录下来
        auction.addCompetitor(this);
    }

    @Override
    public void getPrice() {
        System.out.println("jack竞价人了解到当前的最高价为:" + auction.getPrice());
    }
}

-------------------smith竞价人-----------

/**
 * 具体竞价者:Smith
 */
public class Smith implements Competitor{
    //拍卖师
    private Auction auction;
    public Smith(Auction auction) {
        this.auction = auction;
        //把当前竞价者记录下来
        auction.addCompetitor(this);
    }

    @Override
    public void getPrice() {
        System.out.println("Smith竞价人了解到当前的最高价为:" + auction.getPrice());
    }
}

4.测试

public class Test {
    public static void main(String[] args) {
        //拍卖师
        Auction auction = new Auction();
        //两个竞价者
        new Jack(auction);
        new Smith(auction);

        //假设拍卖师看到宝物的主人给出了最低价:100000,拍卖师立刻告知在场的所有竞价者
        auction.setPrice(100000);

    }
}

输出:

jack竞价人了解到当前的最高价为:100000
Smith竞价人了解到当前的最高价为:100000

总结:以上就是当一个对象作出改变时(拍卖师设置新的价格),它会通知所有的依赖者进行某一些操作(竞价者获取当前最高价)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值