zoukankan      html  css  js  c++  java
  • 菜鸡的Java笔记 开发支持类库

    开发支持类库 SupportClassLibrary
            观察者设计模式的支持类库
                
        
        content (内容)
            什么是观察者设计模式呢?
            这种观察者设计模式本身是i可以利用多线程实现的,不过这样的实现模式i会比较麻烦,所以在java中专门提供了于观察者有关的实现类
                java.util.Observable Observer
                
            首先来观察 Observer 接口定义
                public interface Observer{
                    public void update(Observable o,Object arg); // Object :肉包子
                }
                
            如果要想实现具体的观察者操作则还需要使用 Observable 类,这个类中定义有如下的方法

    NO 名称  类型 简介
    1 public void addObserver(Observer o) 普通 追加观察者
    2 public void deleteObserver(Observer o) 普通 删除观察者
    3 public void notifyObservers() 普通 激活观察者
    4 protected void setChanged() 普通 被观察的操作发生了改变



            下面模拟一个房子的价格的观察者操作

    import java.util.Observable;
    
    class House extends Observable{ // 被观察者
        private doublle price; // 房子价格
        public House(double price){
            this.price = price;
        }
        public void setPrice(double price){
            if(price > this.price){ // 房价上涨有人关注
                super.setChanged(); // 已经能够发生改变
                super.notifyObservers(price); // 通知所有的观察者已经发生了改变
            }
            this.price = price;
        }
    }

               
            于是在准备出观察者,观察者要关注着被观察者的变化

    package cn.mysterious.study3;
    
    import java.util.Observable;
    import java.util.Observer;
    
    class House extends Observable{ // 被观察者
        private doublle price; // 房子价格
        public House(double price){
            this.price = price;
        }
        public void setPrice(double price){
            if(price > this.price){ // 房价上涨有人关注
                super.setChanged(); // 已经能够发生改变
                super.notifyObservers(price); // 通知所有的观察者已经发生了改变
            }
            this.price = price;
        }
    }
    class HousePriceObserver implements Observer{ // 房子价格的观察者
        private String name;
        public HousePriceObserver(String name) {
            // TODO Auto-generated constructor stub
            this.name = name;
        }
        @Override
        public void update(Observable obj, Object arg) {
            if (obj instanceof House) { // 房子的信息发生了改变
                if (arg instanceof House) {
                    double newPrice = (Double) arg;
                    System.out.println("上涨" + newPrice);
                }
            }
        }
    }
    public class SupportClassLibrary {
    
        public static void main(String[] args) throws Exception {
            // TODO Auto-generated method stub
            House house = new House(3000000.0); // 被观察者
            HousePriceObserver hop1 = new HousePriceObserver("1");
            HousePriceObserver hop2 = new HousePriceObserver("2");
            HousePriceObserver hop3 = new HousePriceObserver("3");
            house.addObserver(hop1);
            house.addObserver(hop2);
            house.addObserver(hop3);
            house.setPrice(5000000.0);
        }
    
    }

               
            如果说现在不使用 以上的类或者接口能否实现同样的观察者模式?
                所有的对象保存在一个数组里面,,而后做一个判断,如果判断成功,则执行数组中特定的操作方法
                
        总结
            观察者设计模式主要是介绍这两个类的使用,本身的意义不大

  • 相关阅读:
    java关键字-static
    java内部类
    绘制椭圆
    画出一个三角形
    创建和使用画刷
    画刷使用
    绘制矩形
    在getview方法中有三个参数,起到优化的部分为ViewHolder的使用,主要方法setTag(),getTag()
    SecondContract 接口类
    SecondModel 实现类
  • 原文地址:https://www.cnblogs.com/mysterious-killer/p/10123946.html
Copyright © 2011-2022 走看看