首页 > 从Java类库看设计模式

从Java类库看设计模式

  1 public class FrameSubject extends JFrame {

  2 

  3   …………..

  4 

  5   //因为无法使用多重继承,这儿就只能使用对象组合的方式来引入一个

  6 

  7   //java.util.Observerable对象了。

  8 

  9   DateSubject subject=new DateSubject();

10 

11   //这个方法转发添加Observer消息到DateSubject。

12 

13   public void registerObserver(java.util.Observer o){

14 

15   subject.addObserver(o);

16 

17   }

18 

19   //数据改变,事件被触发后调用notifyObservers()来通知Observer。

20 

21   void jButton1_actionPerformed(ActionEvent e) {

22 

23   subject.setWidthInfo(Integer.parseInt(jTextField1.getText()));

24 

25   subject.setHeightInfo(Integer.parseInt(jTextField2.getText()));

26 

27   subject.notifyObservers();

28 

29   }

30 

31   ……………

32 

33   }

34 

35   public class DateSubject extends Observable {

36 

37   //封装被观察的数据

38 

39   private int widthInfo;

40 

41   private int heightInfo;

42 

43   public int getWidthInfo() {

44 

45   return widthInfo;

46 

47   }

48 

49   public void setWidthInfo(int widthInfo) {

50 

51   this.widthInfo = widthInfo;

52 

53   //数据改变后,setChanged()必须被调用,否则notifyObservers()方法会不起作用

54 

55   this.setChanged();

56 

57   }

58 

59   public void setHeightInfo(int heightInfo) {

60 

61   this.heightInfo = heightInfo;

62 

63   this.setChanged();

64 

65   }

66 

67   public int getHeightInfo() {

68 

69   return heightInfo;

70 

71   }

72 

73   }

74 

75   public class FrameObserver extends JFrame implements java.util.Observer {

76 

77   …………..

78 

79   //观察的数据

80 

81   int widthInfo=0;

82 

83   int heightInfo=0;

84 

85   //在update()方法中实现对数据的更新和其它必要的反应。

86 

87   public void update(Observable o, Object arg) {

88 

89   DateSubject subject=(DateSubject) o;

90 

91   widthInfo=subject.getWidthInfo();

92 

93   heightInfo=subject.getHeightInfo();

94 

95   jLabel1.setText("The heightInfo from subject is: ");

96 

97   jLabel3.setText(String.valueOf(heightInfo));

98 

99   jLabel2.setText("The widthInfo from subject is: ");

100 

101   jLabel4.setText(String.valueOf(widthInfo));

102 

103   }

104 

105   …………….

106 

107   }

108 

109   public class EntryClass {

110 

111   public static void main(String[] args) {

112 

113   ……………..

114 

115   FrameSubject frame = new FrameSubject();

116 

117   FrameObserver frame2=new FrameObserver();

118 

119   //在Subject中注册Observer,将两者联系在一起

120 

121   frame.registerObserver(frame2);

122 

123   …………..

124 

125   frame.setVisible(true);

126 

127   frame2.setVisible(true);

128 

129   ……………..

130 

131   }

132 

133   }

134 

135

更多相关:

  • 在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用json格式的配置文件,那么在.net core中该如何读取json文件呢?1、在Startup类中读取json配置文件1、使用Confi...

  • 本案例主要说明如何使用NSwag 工具使用桌面工具快速生成c# 客户端代码、快速的访问Web Api。 NSwagStudio 下载地址 比较强大、可以生成TypeScript、WebApi Controller、CSharp Client  1、运行WebApi项目  URL http://yourserver/swagger 然后...

  •   在绑定完Action的所有参数后,WebAPI并不会马上执行该方法,而要对参数进行验证,以保证输入的合法性.   ModelState 在ApiController中一个ModelState属性用来获取参数验证结果.   public abstract class ApiController : IHttpController,...

  • 1# 引用  C:AVEVAMarineOH12.1.SP4Aveva.ApplicationFramework.dll C:AVEVAMarineOH12.1.SP4Aveva.ApplicationFramework.Presentation.dll 2# 引用命名空间, using Aveva.Applicati...

  •         Apache POI是一个开源的利用Java读写Excel,WORD等微软OLE2组件文档的项目。        我的需求是对Excel的数据进行导入或将数据以Excel的形式导出。先上简单的测试代码:package com.xing.studyTest.poi;import java.io.FileInputSt...

  • 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; 要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a; 要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1; 通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。 要取得a到b之间的...

  • 利用本征图像分解(Intrinsic Image Decomposition)算法,将图像分解为shading(illumination) image 和 reflectance(albedo) image,计算图像的reflectance image。 Reflectance Image 是指在变化的光照条件下能够维持不变的图像部分...

  • 题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= 50000 解题: cl...

  • 题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树:      5     /    2   6   /  1   3示例 1: 输入: [1,6,3,2,5] 输出...