拒绝一切繁琐的if...else...

开发完项目之后回头看了下代码,发现很多地方if...else很繁琐,假如需要添加一些东西就需要改if...else。在网上看了一些代码,接着又问了朋友,发现有两个方法可以提高拓展性。废话少说,直接看代码!

未改动之前:

class MyBean {
private Bean name;

public MyBean(Bean name) {
this.name = name;
}

public Bean getName() {
return name;
}
}

枚举:

enum Bean {
Ben,James,Kim,John;
}

实现:

MyBean bean = new MyBean(Bean.Ben);
if(bean.getName() == Bean.Ben){
System.out.println("这是ben");
}else if(bean.getName() == Bean.James){
System.out.println("这是James");
}else if(bean.getName() == Bean.John){
System.out.println("这是John");
} else if(bean.getName() == Bean.Kim){
System.out.println("这是Kim");
}


修改1(策略模式):

定义一个接口:

interface Name {
public void getName();
}

bean文件把枚举改为这个接口,然后在实现的地方传入这个接口的实现类就行了

class MyBean {
private Name name;

public MyBean(Name name) {
this.name = name;
}

public Name getName() {
return name;
}

public void setName(Name name) { //这个是实现策略模式相互替换的精髓
this.name = name;
}

public void sayName(){
name.getName();
}

}

实现类:

class Ben implements Name {
@Override
public void getName() {
System.out.println("这是ben");
}
}


class James implements Name {
@Override
public void getName() {
System.out.println("这是James");
}
}


class Kim implements Name {
@Override
public void getName() {
System.out.println("这是Kim");
}
}


class John implements Name {
@Override
public void getName() {
System.out.println("这是John");
}
}

主线程引用:

MyBean bean = new MyBean(new Ben());
bean.sayName();
bean.setName(new James());
bean.sayName();

策略模式,高内聚低耦合,如果还不懂好处的同学请百度搜下策略模式好好看看这里就不多说了。


修改2(传说中的多态):

class MyBean {
    public void sayName(Ben ben){
    ben.getName();
    }
    public void sayName(James james){
    james.getName();
    }
    public void sayName(Kim kim){
    kim.getName();
    }
    public void sayName(John john){
    john.getName();
    }
}

跟策略模式不同的是这里没有实现任何的接口

class Ben {
public void getName() {
System.out.println("这是ben");
}
}

class James {
public void getName() {
System.out.println("这是James");
}
}

class Kim {
public void getName() {
System.out.println("这是Kim");
}
}

class John {
public void getName() {
System.out.println("这是John");
}
}

实现:

MyBean bean = new MyBean();

bean.sayName(new James());
bean.sayName(new Ben());
bean.sayName(new John());


实现的方法还有很多,就先记下这两个方法。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值