- 简单工厂模式特点:通过swtich来选择对象,利用多态的特征用父类接受,多个子类继承父类,重写父类方法;
- 案例背景 : 英雄联盟
- 案列人物 : 盲森 寒冰 皇子 小丑
- 案例需求 : 获取英雄昵称和性别
虽然下面的代码也可以实现,不过可维护性比较差;
1.如对盲僧的昵称进行修改,可能会手误导致寒冰的昵称变成了盲森的昵称;
2.如果对盲森增加一些新的属性,我们就需要在判断里继续添加,如果添加的东西多了,必然会发现代码很臃肿,维护起来很麻烦;
*伪代码
if(“盲僧”.equals(name)){
sout{"性别="+男+“昵称=”+李青}
}
else if(“寒冰”.equals(name)){
sout{"性别="+女+“昵称=”+寒冰}
}
else if(“皇子”.equals(name)){
sout{"性别="+男+“昵称=”+皇子}
}
简单工厂模式:
1.修改可直接修改一个类,不会手误(因为不会修改switch);
2.维护性好新增直接new新对象,并且实现里面的公共方法,防止漏掉一些公共的属性;
package com.mengke.test.celv;
import java.io.Console;
import java.util.Scanner;
/**
* @Auther: zmk
* @Date: 2019/6/13 15:36
* @Description:
*
*/
public class Test {
public static void main(String[] args) {
System.out.println("输入");
Scanner scanner = new Scanner(System.in);
String scannerStr = scanner.nextLine();
BasePersion basePersion = null;
switch (scannerStr){
case "盲僧" : basePersion = new MangSengPersion(); break;
case "寒冰" : basePersion = new HanBingPersion(); break;
case "皇子" : basePersion = new HuangZiPersion(); break;
case "小丑" : basePersion = new XiaoChouPersion(); break;
}
if (null != basePersion){
System.out.println("昵称:"+basePersion.nickName() +" 性别 :"+basePersion.sex());
}else
System.out.println("没有这个英雄!!!");
}
}
package com.mengke.test.celv;
/**
* @Auther: zmk
* @Date: 2019/6/13 16:18
* @Description:
*/
public abstract class BasePersion {
public abstract String nickName();
public abstract String sex();
}
package com.mengke.test.celv;
/**
* @Auther: zmk
* @Date: 2019/6/13 16:23
* @Description:
*/
public class HanBingPersion extends BasePersion{
@Override
public String nickName() {
return "德玛西亚之寒冰";
}
@Override
public String sex() {
return "女";
}
}
class HuangZiPersion extends BasePersion{
@Override
public String nickName() {
return "德玛西亚之皇子";
}
@Override
public String sex() {
return "男";
}
}
class MangSengPersion extends BasePersion{
@Override
public String nickName() {
return "德玛西亚之盲僧";
}
@Override
public String sex() {
return "男";
}
}
class XiaoChouPersion extends BasePersion{
@Override
public String nickName() {
return "德玛西亚之小丑";
}
@Override
public String sex() {
return "男";
}
}