设计模式观察者模式

Posted 写Bug的渣渣高

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式观察者模式相关的知识,希望对你有一定的参考价值。

/**
 * 继承Observer,就可以被观察
 */
public class Course extends Observable 
    private String courseName;

    public String getCourseName() 
        return courseName;
    

    public void setCourseName(String courseName) 
        this.courseName = courseName;
    

    public Course(String courseName) 
        this.courseName = courseName;
    

    public void produceQuestion(Course course,Question question)
        System.out.println(question.getUserName()+" 在 "+course.courseName+"提出了一个问题");
        setChanged();
//      以当前被观察者的名义去通知观察者,传递了一个qusetion对,在其他观察者中
        notifyObservers(question);
    


public class Question 
    private String userName;

    private String questionContent;

    public Question() 
    

    public Question(String userName, String questionContent) 
        this.userName = userName;
        this.questionContent = questionContent;
    

    public String getUserName() 
        return userName;
    

    public void setUserName(String userName) 
        this.userName = userName;
    

    public String getQuestionContent() 
        return questionContent;
    

    public void setQuestionContent(String questionContent) 
        this.questionContent = questionContent;
    


/**
 *  讲师观察的是课程,而不是问题,问题属于课程
 */
public class Teacher implements Observer 
    private String teacherName;

    public Teacher(String teacherName)
        this.teacherName = teacherName;
    

    /**
     *
     * @param o: 被观察的对象,这里是课程
     * @param arg:
     */
    @Override
    public void update(Observable o, Object arg) 

        Course course = (Course) o;
        Question question = (Question) arg;
        System.out.println(teacherName+" 老师的 "+course.getCourseName()+"课程接收到一个"+question.getUserName()+question.getQuestionContent());
    



public class Test 
    public static void main(String[] args) 
        Course course = new Course(" Java 设计模式精讲");
        Teacher teacher = new Teacher("Arpha");
//      给course添加一个观察者,之后,每当course调用 produceQuestion
        course.addObserver(teacher);
//        业务逻辑代码
        Question q = new Question();
        q.setUserName("Ggzx");
        q.setQuestionContent("Java的主函数如何编写");
        course.produceQuestion(course,q);
    


输出:
Ggzx 在 Java 设计模式精讲提出了一个问题
Arpha 老师的 Java 设计模式精讲课程接收到一个GgzxJava的主函数如何编写

以上是关于设计模式观察者模式的主要内容,如果未能解决你的问题,请参考以下文章

[设计模式]观察者模式与订阅模式

设计模式之观察者模式

设计模式之行为型模式

设计模式-行为型模式-观察者模式

常用设计模式-----观察者模式

java设计模式2-观察者模式