如何去除if else?策略模式+工厂模式+Map
事例入下代码片段:其中ShareItem 是 Link、Image、Text、ImageText的抽象类。
工厂类 ShareItemFactory
public class ShareItemFactory{
private Map<Integer, Class<? extends ShareItem>> map = new HashMap<>();
private void init() {
map.put(TYPE_LINK, Link.class);
map.put(TYPE_IMAGE, Image.class);
map.put(TYPE_TEXT, Text.class);
map.put(TYPE_IMAGE_TEXT, ImageText.class);
}
public ShareItem createShareItem(int type) {
try {
Class<? extends ShareItem> shareItemClass = map.get(type);
return shareItemClass.newInstance();
} catch (Exception e) {
return new DefaultShareItem();
}
}
}
抽象类 ShareItem
public abstract class ShareItem {
int type;
public ShareItem(int type) {
this.type = type;
}
public abstract void doShare(ShareListener listener);
}
子类 Link
public class Link extends ShareItem {
String title;
String content;
String link;
public Link(String link, String title, String content) {
super(TYPE_LINK);
this.link = !TextUtils.isEmpty(link) ? link : "default";
this.title = !TextUtils.isEmpty(title) ? title : "default";
this.content = !TextUtils.isEmpty(content) ? content : "default";
}
@Override
public void doShare(ShareListener listener) {
}
}