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;
}
}
}