后端
在项目的开发中碰到或实践过的一些设计模式,回顾一下这些设计模式,备忘。
单例模式
单例模式在全局范围内,同一个类只构造一个对象,全局范围可以引用。减少因对象创造、销毁带来的资源消耗。
public class OtherXiaoerSingleton {
private static OtherXiaoerSingleton singletone = null;
//屏蔽掉新建对象
private OtherXiaoerSingleton() {
}
public synchronized static OtherXiaoerSingleton getInstance() {
if (singletone == null) {
singletone = new OtherXiaoerSingleton();
}
return singletone;
}
public synchronized String getOtherXiaoer(){
//具体的业务实现
}
}
策略模式
先定义一套接口,各个具体实现类实现这套接口,后面可以根据key来取各个具体实现。
public interface BizDataHandler {
Long create(Long caseId,Object o);
void update(Long caseId,Object o);
Long process(Long caseId,HandleType handleType,Object o,Operator operator);
Object query(Long caseId);
}
inCallHandler、appointmentBizDataHandler、normalSeatDataHandler对应的类分别实现上面这个接口,后面就可以根据key来获得想要的实现类。
<bean name="bizDataHandlerFactory"
class="com.alibaba.china.minerals.gembone.component.icase.BizDataHandlerFactory">
<property name="handlers">
<map>
<entry key="general_complaint" value-ref="inCallDataHandler"/>
<entry key="appointment.pwf_merchant" value-ref="appointmentBizDataHandler"/>
<entry key="Task_CtpInCall_NormalSeat" value-ref="normalSeatDataHandler"/>
</map>
</property>
</bean>
装饰模式
装饰模式是要分步的对数据加工处理。首先,我们要在数据处理类里面定义一个属性,属性里面包含所有对数据加工处理的类。这些类要有一个共同的数据处理方法。这里,我们可以定义一个接口方法,各个数据加工类实现这个公共的接口方法。 通用接口定义如下:
public interface DataDecorator<Data> {
Data decorate(Data data);
}
定义了接口及方法,各个数据处理类实现这个接口方法,然后把这些数据处理类打包配置成数据处理入口类的一个属性,在初始化的时候注入到这个属性中。这样,不管这个属性有多少个具体的实现,都可以处理数据。 属性配置:
<bean id="noteToCaseIndexDecorator"
class="com.alibaba.china.sascab.component.icase.index.NoteToCaseIndexDecorator">
<property name="decorators">
<list>
<bean class="com.alibaba.china.sascab.component.icase.index.decorator.notetocase.NormalSeatDecorator"/>
<bean class="com.alibaba.china.sascab.component.icase.index.decorator.notetocase.WsCaseDecorator"/>
<bean class="com.alibaba.china.sascab.component.icase.index.decorator.MemberInfoDecorator"/>
<bean class="com.alibaba.china.sascab.component.icase.index.decorator.summary.ComplaintDecorator"/>
<bean class="com.alibaba.china.sascab.component.icase.index.decorator.summary.AppointmentDecorator"/>
</list>
</property>
</bean>
数据处理入口类:
public class NoteToCaseIndexDecorator implements DataDecorator<Map<String, String>>, InitializingBean {
private List<DataDecorator<Map<String, String>>> decorators;
public void setDecorators(List<DataDecorator<Map<String, String>>> decorators) {
this.decorators = decorators;
}
@Override
public void afterPropertiesSet() throws Exception {
if (decorators.isEmpty()) {
throw new IllegalStateException("CaseIndexDecorator has empty decorators!");
}
}
@Override
public Map<String, String> decorate(Map<String, String> data) {
for (DataDecorator<Map<String, String>> decorator : decorators) {
decorator.decorate(data);
}
return data;
}
}