应用场景:项目中经常遇到重复的代码在多个地方使用,把业务逻辑代码提取到父类(抽象类)中,然后各自的实现类都继承父类。
一般优化
比如3个类里面的方法都有一段相同的代码
public class AAAImpl{
public void deal(){
System.out.println("公共方法");
System.out.println("AAA 的娱乐活动");
}
}
public class BBBImpl{
public void deal(){
System.out.println("公共方法");
System.out.println("BBB 的娱乐活动");
}
}
public class CCCImpl{
public void deal(){
System.out.println("公共方法");
System.out.println("CCC 的娱乐活动");
}
}
public class Test{
AAAImpl aa = new AAAImpl();
aa.deal();
BBBImpl bb = new BBBImpl();
bb.deal();
CCCImpl cc = new CCCImpl();
cc.deal();
}
绝大多数情况下,我们都是把公用方法提起到一个工具类里面
public class PublicUtil {
public static void common(){
System.out.println("公共方法");
}
}
重构代码后如下
public class AAAImpl{
public void deal(){
// System.out.println("公共方法");
PublicUtil.common();
System.out.println("AAA 的娱乐活动");
}
}
public class BBBImpl{
public void deal(){
// System.out.println("公共方法");
PublicUtil.common();
System.out.println("BBB 的娱乐活动");
}
}
public class CCCImpl{
public void deal(){
// System.out.println("公共方法");
PublicUtil.common();
System.out.println("CCC 的娱乐活动");
}
}
模板模式
新建接口
用来处理不同类里面各自的逻辑
public interface DisCommon {
public void speicatDeal();
}
新建抽象类实现接口
public abstract class AbstractCommon implements DisCommon{
public void deal(){
commonDeal();
speicatDeal();;
}
private void commonDeal(){
System.out.println("公共方法");
}
public abstract void speicatDeal();
}
继承抽象类
public class AAAImpl extends AbstractCommon{
@Override
public void speicatDeal() {
System.out.println("AAA 的娱乐活动");
}
}
public class BBBImpl extends AbstractCommon{
@Override
public void speicatDeal() {
System.out.println("BBB 的娱乐活动");
}
}
public class CCCImpl extends AbstractCommon{
@Override
public void speicatDeal() {
System.out.println("CCC 的娱乐活动");
}
}
public class Test{
DisCommon aa = new AAAImpl();
aa.deal();
DisCommon bb = new BBBImpl();
bb.deal();
DisCommon cc = new CCCImpl();
cc.deal();
}