软件体系结构与设计模式 观察者模式实验

需求:主体有两种事件,观察者可以任意关注其中的某个事件或全部事件,当主体事件发生,通知对应的观察者。

例如:主体是商场,有新货上架和降价两种事件,消费者可以关注其中的一种或全部事件,当降价了,可以通知所有关注降价的消费者。

目录:

主体:

import java.util.ArrayList;

import java.util.List;

public abstract class Observable {

       private List<Observer> listone=new ArrayList<Observer>();

       private List<Observer> listtwo =new ArrayList<Observer>();

      

       public void attachone(Observer observer) {

              listone.add(observer);

              System.out.println("添加一个上架观察者");

       }

       public void detachone(Observer observer) {

              listone.remove(observer);

       }

       public void nodifyObserversone(String newState) {

              for(Observer observer:listone) {

                     observer.updateone(newState);

              }

       }

      

       public void attachtwo(Observer observer) {

              listtwo.add(observer);

              System.out.println("添加一个降价观察者");

       }

       public void detachtwo(Observer observer) {

              listtwo.remove(observer);

       }

       public void nodifyObserverstwo(String newState) {

              for(Observer observer:listtwo) {

                    

                     observer.updatetwo(newState);

              }

       }

}

具体主体:

public class Market extends Observable{

    private String putawaystate;

    private String depreciatestate;

   

    public String getPutawayState() {

        return putawaystate;

    }

   

    public String getDepreciateState() {

        return depreciatestate;

    }

    public void changeputawaystate(String newState) {

        putawaystate =newState;

        System.out.println("发布主题状态:"+putawaystate);

        this.nodifyObserversone(putawaystate);

    }

    public void changedepreciatestate(String newState) {

        depreciatestate =newState;

        System.out.println("发布主题状态:"+depreciatestate);

        this.nodifyObserverstwo(depreciatestate);

    }

}

观察者:

public abstract class Observer {

   

    private String name;

    public Observer(String name) {

        this.name=name;

    }

   

    public String getName() {

        return name;

    }

   

    public void setName(String name) {

        this.name=name;

    }

    public abstract void updateone(String state);

    public abstract void updatetwo(String state);

}

具体观察者:

public class Consumer extends Observer{

    public Consumer(String name) {

        super(name);

    }

    private String putawaystate;

    private String depreciatestate;

   

   

    public void updateone(String state) {

        putawaystate =state;

        System.out.println(super.getName()+"状态为:"+putawaystate);

       

    }

   

    public void updatetwo(String state) {

        depreciatestate =state;

        System.out.println(super.getName()+"状态为:"+depreciatestate);

       

    }

}

客户端:

public class Client {

    public static void main(String[] args) {

        Market market = new Market();

       

        Observer observerthree =new Consumer("1");

        market.attachone(observerthree);

        market.attachtwo(observerthree);

        market.changeputawaystate("商品B上架");

        market.changedepreciatestate("商品B降价");

       

        System.out.println("~~~~~~~~~~~");

       

        Observer observerone =new Consumer("2");

        market.attachone(observerone);

        market.changeputawaystate("商品A上架");

       

        System.out.println("~~~~~~~~~~~");

       

        Observer observertwo =new Consumer("3");

        market.attachtwo(observertwo);

        market.changedepreciatestate("商品A降价");

        System.out.println("~~~~~~~~~~~");

       

       

       

    }

}

实验结果:

类图:

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
软件设计与体系结构中的结构型设计模式是一种用于解决软件系统中对象之间的组织和通信问题的设计模式。它们关注的是如何将类和对象组合成更大的结构,并提供了一种灵活的方式来实现对象之间的交互。 以下是几种常见的结构型设计模式: 1. 适配器模式(Adapter Pattern):将一个类的接口转换成客户端所期望的另一个接口。适配器模式可以让原本不兼容的类能够一起工作。 2. 桥接模式(Bridge Pattern):将抽象部分与实现部分分离,使它们可以独立变化。桥接模式可以将一个类的抽象和实现层次结构分离,从而使它们能够独立地变化。 3. 组合模式(Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 4. 装饰器模式(Decorator Pattern):动态地给一个对象添加额外的职责。装饰器模式提供了一种灵活的方式来扩展对象的功能。 5. 外观模式(Facade Pattern):为子系统中的一组接口提供一个统一的接口。外观模式可以简化复杂系统的接口,使得客户端更容易使用。 6. 享元模式(Flyweight Pattern):运用共享技术来有效地支持大量细粒度对象的复用。享元模式可以减少系统中对象的数量,从而提高系统的性能。 7. 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。代理模式可以在不改变原始对象的情况下,通过引入代理对象来控制对原始对象的访问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值