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接口,导致需要实现所有的接口方法。 * ps:如果担心使用者没有重置默认方法,就进行使用,则可以让默认方法抛出一个运行时异常。 * @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---------------------------------------------------------