注:例子根据菜鸟案例进行更生动的改编,并加以自己的理解
创建一个People接口
public interface People {
void makeMoney();
}
实现了People接口的大儿子类
public class FirstSon implements People {
@Override
public void makeMoney() {
System.out.println("大儿子在赚钱。。");
}
}
同样实现了People接口的二儿子类
public class SecondSon implements People {
@Override
public void makeMoney() {
System.out.println("二儿子在赚钱。。");
}
}
我们再创建一个工厂类:(作用:根据传入名字将子类对象返回)
public class Factory {
public People setDetailPeople(String name){
if(name == null){
return null;
}
if(name.equalsIgnoreCase("first")){
return new FirstSon();
} else if(name.equalsIgnoreCase("second")){
return new SecondSon();
}
return null;
}
}
最后,我们使用这个工厂(使用子类对象 并调用子类中的方法)
public class UseFactory {
public static void main(String[] args) {
Factory factory = new Factory();
// People people = factory.setDetailPeople("first");
People people = factory.setDetailPeople("second");
people.makeMoney();
}
}
输出结果为:二儿子在赚钱。。
如果我们把使用工厂的方法再修改一下:
public class UseFactory {
public static void main(String[] args) {
getSon("first").makeMoney();
}
public static People getSon(String name){
Factory factory = new Factory();
return factory.setDetailPeople(name);
}
}
同理,我们不仅可以将name作为参数传入方法,这样对外只需传入一个名字即可,而不用每次都new对象;同理 如果需要 可以将name写入配置文件中,从配置文件中获取,达到灵活配置的目的;
其实,设计模式最主要的作用还是解耦合,做到新增功能不需要更改现有功能,不会出现新增功能将原有功能改崩的情况,推荐《大话设计模式》,看完第一章,就能体会解耦合的优点了。