慢慢说设计模式:建造者模式

小Q:什么是设计模式

慢慢:设计模式是系统服务设计中针对常见场景的一种解决方案,可以解决功能逻辑开发中遇到的共性问题。设计模式并不局限最终的实现方案,而是在这种概念模式下,解决系统设计中的代码逻辑问题。


小Q:什么是建造者模式

慢慢:建造者模式的核心目的是通过多个简单对象一步一步地构造出一个复杂对象出来。例如我们装修房子,不仅需要考虑硬装部分,如地板,瓷砖,门框等,还需要考虑软装部分,如桌椅,沙发,家电等。如果我们只用一个对象去表示整个装修过程,这会让整个代码变得复杂,不易解耦。建造者模式也属于创建型模式。


小Q:理解了,赶快上代码!

慢慢:我们以装修为例,先创建一个材料接口。

public interface Matter {
    String category();  // 类别
    String brand();  // 品牌
    double price();  // 价格
}

瓷砖类:

// 1. 东鹏
public class DongPeng implements Matter {
    public category() {
        return "瓷砖";
    }
    
    public brand() {
        return "东鹏";
    }
    
    public price() {
        return 100L;
    }
}

-----
// 2. 马可波罗
public class MarcoPolo implements Matter {
    public String category() {
        return "瓷砖";
    }
    
    public String brand() {
        return "马克波罗";
    }
    
    public double price() {
        return 150L;
    }
}

地板类:

// 1. 德尔
public class Der implements Matter {
    public String category() {
        return "地板";
    }
    
    public String brand() {
        return "德尔";
    }
    
    public double price() {
        return 50L;
    }
}
----
// 2. 圣像
public class ShengXiang implements Matter {
    public String category() {
        return "地板";
    }
    
    public String brand() {
        return "圣像";
    }
    
    public double price() {
        return 30L;
    }
}

电视类:

// 1. 小米
public class XiaoMi implements Matter {
    public String category() {
        return "电视";
    }
    
    public String brand() {
        return "小米";
    }
    
    public double price() {
        return 3000L;
    }
}

---
// 2. 乐视
public class LeShi implements Matter {
    public String category() {
        return "电视";
    }
    
    public String brand() {
        return "乐视";
    }
    
    public double price() {
        return 2500L;
    }
}

装修清单

public class DecorationList {
    ArrayList<Matter> list = new ArrayList<>();  // 清单列表
    
    public DecorationList add(Matter matter) {
        list.add(matter);
        return this;
    }
}

使用测试:

public class Demo {
    public static void main(String[] args) {
        DecorationList decorationList = new DecorationList();
        decorationList.add(new Der())
            .add(new MarcoPolo())
            .add(new LeShi());  // 链式编程
    }
}

小Q:建造者模式好强大呀,它能应用在哪些地方呢

慢慢:当我们面临一个复杂对象的创建时,我们可以用到此模式,对各个部分的用子对象的方式剥离出来,再将它们组合成一起,从而时代码更加健壮和可用。

上一篇:豌豆荚爬虫


下一篇:按条件查询功能