swing-观察者模式中没有抽象观察者接口怎么办

问题描述

观察者模式中没有抽象观察者接口怎么办

比如Swing组件是已经被封装好了,不可能让它去实现一个Observer接口。这使有没有其他的办法。我看网上有人说用代理模式?怎样解决?

解决方案

代理就是给原来的类扩展机能

1你做一个代理类,这个类和你目前的类具有相同的接口
2-然后在这个代理类中定义一个子对象就是你当前类的对象
3--然后你写出接口的方法
自己增加扩展机能,然后调用这个字对象的方法(也是该接口的)

解决方案二:

太一般化了,针对你的问题就是

比如以JButton为例,做一个 JButtonProxy的类,它组合一个JButton对象,JButtonProxy的就是这个JButton得代理类
这个类和JButton有相同的接口或者抽象父类
然后你再给这个类增加实现的接口

凡是和Jbutton一样的方法实现的时候,都调用这个Jbutton对象的方法。
如果你想增加什么新的功能,只要在Jbutton对象的方法调用前后增加即可

解决方案三:

可以使用适配器模式、桥模式、装饰模式,具体要看你的应用场景。

时间: 2024-07-30 13:55:11

swing-观察者模式中没有抽象观察者接口怎么办的相关文章

php中关于抽象(abstract)类和抽象方法的问题分析

 这篇文章主要介绍了php中关于抽象(abstract)类和抽象方法的问题分析,有需要的朋友可以参考一下 在面向对象(OOP)语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法作为外部代码访问的接口.而抽象方法就是为了方便继承而引入的,现在来看一下抽象类和抽象方法分别是如何定义以及他们的特点.   什么是抽象方法?我们在类里面定义的只有方法名没有方法体的方法就是抽象方法,所谓没有方法体就是在方法声明的时候没有大括号以及其中的内容,而是直接声明时在方法名后加上分号结束,另外在声明抽象

做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处

做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处 interface Animal{             //动物的接口    public void eat(Food food); //接口中只有抽象的方法和静态常量!这里void前面省略了abstract.同样,变量可以省略static final} class Cat implements Animal //一种动物类:猫  {      public void eat(Food food) //这里是对

java中panel实现线程接口以后,要调用repaint函数时,不进run函数

问题描述 java中panel实现线程接口以后,要调用repaint函数时,不进run函数 具体情况是 mypanel类实现了线程接口,在run函数中定义了sleep(100)后调用repaint函数,做一个小坦克游戏,在repaint之前要判断是否击中坦克,击中后要显示三张图片来体现爆炸效果,可是经过调试发现,每次第一次击中的时候,都是直接好多次repaint,没有休眠,后来发现根本就没有进mypanel的run()方法,好像有另一个其他线程再调用paint.这是怎么回事?感谢大家了 pack

详解iOS应用开发中使用设计模式中的抽象工厂模式_IOS

概述 我们知道简单工厂模式的优点是去除了客户端与具体产品的依赖,缺点是违反了"开放-关闭原则":工厂方法模式克服了简单工厂模式的缺点,将产品的创建工作放到具体的工厂类,每个工厂类负责生成一个产品.但是在实际应用中,一个工厂类只创建单个产品的情况很少,一般一个工厂类会负责创建一系列相关的产品,如果我们要设计这样的系统,工厂方法模式显然不能满足应用的需求,本章要介绍的抽象工厂模式,可以很好地解决一系列产品创建的问题. 定义 "提供一个创建一系列相关或相互依赖对象的接口,而无需指定

解析iOS应用开发中对设计模式中的抽象工厂模式的实现_IOS

概述抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广. 假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产品等级结构.那么为了将消费这些产品对象的责任和创建这些产品对象的责任分割开来,可以引进抽象工厂模式.这样的话,消费产品的一方不需要直接参与产品的创建工作,而只需要向一个公用的工厂接口请求所需要的产品. 通过使用抽象工厂模式,可以处理具有相同(或者相似)等级结构中的多个产品族中的产品对象的创建问题.如下图所示: 根据产品角色的结构图,就不难给出工厂角色的结构设计图. 可以看

Java的Swing编程中使用SwingWorker线程模式及顶层容器_java

使用SwingWorker线程模式 谨慎地使用并发机制对Swing开发人员来说非常重要.一个好的Swing程序使用并发机制来创建不会失去响应的用户接口-不管是什么样的用户交互,程序总能够对其给出响应.创建一个有响应的程序,开发人员必须学会如何在Swing框架中使用多线程. 一个Swing开发人员将会与下面几类线程打交道: (1)Initial threads(初始线程),此类线程将执行初始化应用代码. (2)The event dispatch thread(事件派发线程),所有的事件处理代码在

stringbuilder-C#中调用C++Dll接口,字符串编码问题

问题描述 C#中调用C++Dll接口,字符串编码问题 在C#中调用C++Dll接口,接口返回一个多字节字符串,然后再C#中再次转码为宽字节字符串. 字符串内容都为汉字. **_问题: 如果汉字为偶数个,则一切正常: 如果汉字为奇数个,则C#获得的多字节字符串内容的最后一个字节被篡改成'?'的ascll码.(多字节编码时,每个汉字占三个字节) 本人没多少币,全部家当拿出来了,求大神指点.**_ C++代码: // 宽字节转多字节 __declspec(dllexport) void TCharTo

gson-WebService接口中的参数为接口时的序列与反序列化问题

问题描述 WebService接口中的参数为接口时的序列与反序列化问题 最近有个WebService的项目,服务端发布的WebService接口包含一个接口参数,而且这个接口还比较复杂. 于是用了gson来序列与反序列,但是反序列时,说没有无参构造函数. 好吧,我接口哪有构造函数,于是看gson的API,发现可以使用InstanceCreator这个接口来实现无参构造的问题. Java代码 //这里是gson API中的例子 class IdInstanceCreator implements

swing 开发过程中遇到的奇葩问题

swing 开发过程中遇到的奇葩问题 1,实现Ctrl+Tab 切换页签的功能 但是在实际开发中遇到了问题,切换的时候,预期是切换到序号33的页签,结果切换到了序号34 的页签. 后来发现Ctrl+Tab是系统的快捷键,与程序实现功能混淆,导致错乱. 最后就在程序中使用Shift+Tab 快捷键 Java代码   if (event.getClass() == KeyEvent.class) {                               KeyEvent kE = ((KeyE