MainRun.java类,是程序运行入口,含有main方法。大伙认真的看main方法上面的注释喔,是博主对此模式的总结和分析。(附 advantage是表示使用此模式的优势,disadvantage是此模式的不足和缺点,use scene是表示此模式的使用场景。)
package cn.cat.design.mode.adaptor.defaults;
public class MainRun {
/**适配器模式(默认适配器):与类适配器和对象适配器不同,默认适配器的目的是在于简化使用者对目标接口(抽象类)的实现
使用者只需要重载需要使用到的方法即可。
*
* advantage: 简化了目标接口(抽象类)的实现。
*
* disadvantage:因为默认适配器是类,使用者必须要继承此类,导致使用者不能再继承其他的类,使扩展受限。
*
* use scene:目标接口的方法比较多,而使用者仅使用了其中一部分方法。
*
* @param args
*/
public static void main(String[] args) {
//A公司翻译者。会说中文和英语。
TranslationJob aTranslator = new ACompanyTranslator();
aTranslator.speakChinese();
aTranslator.speakEnglish();
//B公司翻译者。会说德语、法语和日语。
TranslationJob bTranslator = new BCompanyTranslator();
bTranslator.speakGerman();
bTranslator.speakFrench();
bTranslator.speakJapanese();
}
}
TranslationJob.java
package cn.cat.design.mode.adaptor.defaults;
/**
* 翻译工作的要求 接口
* @author Cat(gwj)
* date 2015-9-7
* time 下午8:45:51
*/
public interface TranslationJob {
/**说中文
*
*/
public void speakChinese ();
/**说日语
*
*/
public void speakJapanese();
/**说法语
*
*/
public void speakFrench();
/**说德语
*
*/
public void speakGerman();
/**说英语
*
*/
public void speakEnglish();
}
DefaultTranslationJob.java
package cn.cat.design.mode.adaptor.defaults;
/**此方法实现TranslationJob接口,但是所有方法都只是空实现,
* 目的是让目标类直接继承此类,只需要实现部分使用到的方法即可,
* 而不用去实现TranslationJob接口,导致需要实现所有的接口方法。<br/>
* <b>ps:</b>如果担心使用者没有重置默认方法,就进行使用,则可以让默认方法抛出一个运行时异常。
* @author Cat(gwj)
* date 2015-9-7
* time 下午9:01:14
*/
public class DefaultTranslationJob implements TranslationJob{
@Override
public void speakChinese() {
// TODO Auto-generated method stub
}
@Override
public void speakJapanese() {
// TODO Auto-generated method stub
}
@Override
public void speakFrench() {
// TODO Auto-generated method stub
}
@Override
public void speakGerman() {
// TODO Auto-generated method stub
}
@Override
public void speakEnglish() {
// TODO Auto-generated method stub
}
}
ACompanyTranslator.java
package cn.cat.design.mode.adaptor.defaults;
/**A公司的翻译者。
* 要求会说中文和英语,因此只需要重载中文speakChinese()和英语speakEnglish()方法,其余使用默认的方法即可。
* @author Cat(gwj)
* date 2015-9-7
* time 下午9:08:45
*/
public class ACompanyTranslator extends DefaultTranslationJob {
@Override
public void speakChinese() {
//进行业务逻辑操作
System.out.println("ACompanyTranslator.speakChinese");
}
@Override
public void speakEnglish() {
//进行业务逻辑操作
System.out.println("ACompanyTranslator.speakEnglish");
}
}
BCompanyTranslator.java
package cn.cat.design.mode.adaptor.defaults;
/**B公司的翻译者。
* 要求会说法语、日语和德语,因此只需要重载speakFrench()、speakJapanese()和speakGerman()方法,其余使用默认的方法即可。
* @author Cat(gwj)
* date 2015-9-7
* time 下午9:08:45
*/
public class BCompanyTranslator extends DefaultTranslationJob {
@Override
public void speakFrench() {
//进行业务逻辑操作
System.out.println("BCompanyTranslator.speakFrench");
}
@Override
public void speakJapanese() {
//进行业务逻辑操作
System.out.println("BCompanyTranslator.speakJapanese");
}
@Override
public void speakGerman() {
//进行业务逻辑操作
System.out.println("BCompanyTranslator.speakGerman");
}
}
------------------------------------------------------------demo end---------------------------------------------------------