开发完项目之后回头看了下代码,发现很多地方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 Ben());
bean.sayName(new John());
实现的方法还有很多,就先记下这两个方法。