day8-6(二)

Java中的回调模式

简单的理解:
    有类A和类B,类A中有方法C.类B中有方法D
    A调用了B中的D
    B调用了A中的C.那么C就被叫做回调方法
[回调模式](http://blog.csdn.net/pi9nc/article/details/23169357) 

Java中的工厂模式

是一个典型的解耦框架,高层模块只需要知道产品的抽象类,二不需要知道它的实类
优点:
    1.良好的封装性
    2.良好的扩展性
    符合OO中的依赖倒置.里氏替换.迪米特法则
使用场景:
拓展:     
    -1.简单工厂
    -2.静态工厂
    -3.多个工厂 
    -4.工厂代替单例
    注:实际开发中会把单例,工厂,模板,原型混合使用

    练习题:
    一天你梦到阿拉丁神灯,我可以实现你找女朋友的愿望,我这里有日本的,美国,英国的,俄罗斯的,你想要哪个国家的
    你说,我要美国的.神灯为你提供了一个金发美女
    工厂使用单例
package com.howell.factory;

/**
 * Created by HowellZhang on 2016/8/6.
 */
public interface IGirlFriend {//女朋友接口
    void getPlace();
    void showGirl();
}
package com.howell.factory;

/**
 * 美国妹纸类
 * Created by HowellZhang on 2016/8/6.
 */
public class AmericanGirl implements IGirlFriend {
    @Override
    public void getPlace() {
        System.out.println("这里是美国!!!");
    }

    @Override
    public void showGirl() {
        System.out.println("hello,我是美国长腿美女.");

    }
}
package com.howell.factory;

/**
 * 英国妹纸类
 * Created by HowellZhang on 2016/8/6.
 */
public class EnglandGirl implements IGirlFriend {
    @Override
    public void getPlace() {
        System.out.println("这里是英国!!!");

    }

    @Override
    public void showGirl() {
        System.out.println("HI!我是英国的胖妹纸!");

    }
}
package com.howell.factory;

/**
 * 虚拟工厂类
 * Created by HowellZhang on 2016/8/6.
 */
public abstract class AbstractFactory {
    public abstract IGirlFriend getGirl(Class cls);

}
package com.howell.factory;


/**
 * 造女票的工厂
 * Created by HowellZhang on 2016/8/6.
 */
public class ProduceGirlFactory extends AbstractFactory {//这里对该工厂使用了单例模式
    private ProduceGirlFactory(){}
    private static ProduceGirlFactory produceGirlFactory=new ProduceGirlFactory();
    public static ProduceGirlFactory getInstance(){
        return produceGirlFactory;
    }
    @Override
    public IGirlFriend getGirl(Class cls) {//造不同类型女票的方法
        if (cls==null)
            return null;
        if (cls==AmericanGirl.class)
            return new AmericanGirl();
        else if (cls==EnglandGirl.class)
            return new EnglandGirl();
        else if (cls==JapanGirl.class)
            return new JapanGirl();
        else if (cls==RussianGirl.class)
            return new RussianGirl();
        else {return null;}
    }

}
package com.howell.main;

import com.howell.factory.*;

import java.util.Scanner;

/**
 * 阿拉丁神灯许愿入口
 * Created by HowellZhang on 2016/8/6.
 */
public class ALD {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("我是阿拉丁神灯,说出你的愿望吧!想要那个国家的美女做你的女朋友?1.美国 2.日本 3.英国 4.俄罗斯");
        AbstractFactory factory= ProduceGirlFactory.getInstance();
        int chosen=scanner.nextInt();
        switch (chosen){
            case 1:
                AmericanGirl americanGirl=(AmericanGirl) factory.getGirl(AmericanGirl.class);
                americanGirl.getPlace();
                americanGirl.showGirl();
                break;
            case 2:
                JapanGirl japanGirl=(JapanGirl) factory.getGirl(JapanGirl.class);
                japanGirl.getPlace();
                japanGirl.showGirl();
                break;
            case 3:
                EnglandGirl englandGirl=(EnglandGirl)factory.getGirl(EnglandGirl.class);
                englandGirl.getPlace();
                englandGirl.showGirl();
                break;
            case 4:
                RussianGirl russianGirl=(RussianGirl)factory.getGirl(RussianGirl.class);
                russianGirl.getPlace();
                russianGirl.showGirl();

                break;
            default:
                System.out.println("很遗憾,以你的智商错过了此次机会!");
                break;
        }

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值