选择显示字体大小

java结构性模式之变压器模式介绍(四)

关于模式实现的讨论

  本模式在实现时有以下这些值得注意的地方:

  第一、目标接口可以省略。此时,目标接口和源接口实际上是相同的。 由于源是一个接口,而变压器类是一个类(或抽象类),因此这种做法看似平庸而并不平庸, 它可以使客户端不必实现不需要的方法。这一点已经在windowadapter的例子里做了详尽的分析。

  第二、变压器类可以是抽象类。这已经在windowadapter的例子里看到了。实际上,windowadapter的例子过于简单。 实际的情形里,你可能想给出一些实方法。

  第三、带参数的变压器模式。使用这种办法,变压器类就不必,有时可能不能是源类的子类。 变压器类根据参数返还一个合适的实例给客户端。

  问答题

  第1题、请做一个小猫(kittie)的实类,并实现miao(),catchrat(),run(),sleep()等方法。 再做一个小狗(doggie)的接口,要求有wao(),fetchball(),run(),sleep()等方法。

  现在你的女朋友想要一只小狗,可是你只找到的一只小猫。请用变压器模式把小猫“适配成”小狗, 让你的女朋友满意。(提示:量力而为。)

  第2题、请指出第一题的解答所使用的是那一种形式的变压器模式

  第3题、笔者在许多场合给各种不同水准的专业人士作过各种编程模式的介绍,发现参加oop开发工作的不同时间长短的人, 对不同的模式理解接受的速度有所不同。唯独在讲过这个男朋友与小狗小猫的例子后,大家对变压器模式的理解都很准确。 让笔者百思不得其解。你知道这是怎样回事吗?

  第4题、请讲一讲使用实例形式的变压器模式和使用类形式的变压器模式在第一题的解决上有何影响。
问答题答案

  第1题、根据提示,我们可以量力而为。因此,我们将把miao()“适配成”wao(),catchrat()“适配成”fetchball(), run(),sleep()不变。源代码如下:

package com.javapatterns.adapter.kittie2doggie;

public interface doggie
{
    void wao();
    void fetchball();
    void run();
    void sleep();
    void setname(string name);
    string getname();
}

代码清单11. swingui类的源代码。红色的代码就是使用windowadapter的无名内部类。


package com.javapatterns.adapter.kittie2doggie;
public class kittie {
    public void miao(){}
    public void catchrat() {
    }
    public void run() {
    }
    public void sleep() {
    }
    public string getname(){ return name; }
    public void setname(string name){ this.name = name; }
}

代码清单12. swingui类的源代码。红色的代码就是使用windowadapter的无名内部类。


package com.javapatterns.adapter.kittie2doggie;
public class boyfriend extends kittie implements doggie
{
    public void wao()
    {
        this.miao();
    }
    public void fetchball()
    {
        this.catchrat();
    }
    public void run()
    {
        super.run();
    }
    public void sleep()
    {
        super.sleep();
    }
    public string getname()
    {
        return super.getname();
    }
    public void setname(string name)
    {
     super.setname(name);
    }
}

代码清单13. swingui类的源代码。红色的代码就是使用windowadapter的无名内部类。

  怎么,她不满意呀?那也有办法:把wao(),fatchball()当作新的方法,在变压器类中实现。由于你扮演变压器角色, 当她调用wao(),fatchball()方法是,你就叫一声,或把球捡回来就可以了。

  你不满意呀?那就再去找一只真正的小狗吧。变压器模式的威力就到此为止了。

  第2题、这里使用的是类形式的变压器模式

  第3题、我的一个学生告诉我,理解这个问题的关键,即男朋友必须装小狗。

  第4题、使用类形式的结果是,她一旦想要另一个宠物,她就得换一个男朋友。 使用实例形式的变压器模式的结果是,她如果想要另一个宠物,原来的男朋友就得身兼几种身份。
from-yesky


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons