设计模式之简单工厂模式

  • 简单工厂模式特点:通过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 "男";
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值