学习工厂模式和简单工厂模式是为了接下来通过工厂模式和简单实例化模式实例化bean对象打下基础,,同时spring框架底层大量使用工厂模式。
首先我们来看一下简单工厂模式。
我们首先创建三个普通的角色对象
public class huiliyi {
public void skill(){
System.out.println("审判");
}
public class kaisa {
public void skill(){
System.out.println("镰鼬");
}
public class lumingfei {
public void skill(){
System.out.println("不要死");
}
如果此时我们想调用skill方法就需要
public static void main(String[] args) {
lumingfei lu = new lumingfei();
lu.skill();
kaisa ka = new kaisa();
ka.skill();
}
每次都需要new对象并且调用方法,但是我们只是想调用skill方法,能不能将创建过程屏蔽掉,那么我们可以这么写。
首先我们可以先写一个抽象类,将所有的有skill方法的类都继承它,这样我们可以规定方法名字,方便使用
那么代码就如下所示
public abstract class Role {
public abstract void skill() ;
}
public class lumingfei extends Role {
public void skill(){
System.out.println("不要死");
}
}
public class kaisa extends Role {
public void skill(){
System.out.println("镰鼬");
}
}
...
此时我们还是可以通过new来调用不同的skill.只要我们加上之下的静态方法
就可以升级了
public static Role get(String roleType) {
if ("huiliyi".equals(roleType)) {
return new huiliyi();
} else if ("lumingfei".equals(roleType)) {
return new lumingfei();
} else if ("kaisa".equals(roleType)) {
return new kaisa();}else {
return null;}
}
}
然后我们只要在住方法中调用静态方法即可
public class Main {
public static void main(String[] args) {
Role h = RoleFactory.get("huiliyi");
Role l = RoleFactory.get("lumingfei") ;
h.skill();
l.skill();
}
}
父类引入指向子类对象,可以调用子类中重写父类的方法,并且调用的是子类的方法
但是我并不知道这个模式还有什么优势,慢慢学习吧