Builder建造者设计模式
生活随笔
收集整理的這篇文章主要介紹了
Builder建造者设计模式
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目錄
案例一?
案例二
?
使用場景:當(dāng)構(gòu)建一個(gè)復(fù)雜的對象需要傳入很多參數(shù)的時(shí)候,或者是一個(gè)對象的屬性有很多,但是使用時(shí)也許只需要這個(gè)對象的幾個(gè)屬性,如果使用構(gòu)造器的話,就得將不需要的參數(shù)也傳個(gè)null進(jìn)去,比方說一個(gè)對象有100個(gè)屬性,但是我只需要里面的2個(gè)屬性,那我得new對象時(shí)傳98個(gè)null進(jìn)去,這兩種情況下就可以選擇使用建造者模式。?
案例一?
實(shí)體類?
public class Terrain {Wall w;Fort f;Mine m; }class Wall {int x, y, w, h;public Wall(int x, int y, int w, int h) {this.x = x;this.y = y;this.w = w;this.h = h;} }class Fort {int x, y, w, h;public Fort(int x, int y, int w, int h) {this.x = x;this.y = y;this.w = w;this.h = h;}}class Mine {int x, y, w, h;public Mine(int x, int y, int w, int h) {this.x = x;this.y = y;this.w = w;this.h = h;} }?接口
每個(gè)方法的返回值都是TerrainBuilder對象,就可以實(shí)現(xiàn)鏈?zhǔn)骄幊獭?/p> public interface TerrainBuilder {TerrainBuilder buildWall();TerrainBuilder buildFort();TerrainBuilder buildMine();Terrain build(); }
實(shí)現(xiàn)?
public class ComplexTerrainBuilder implements TerrainBuilder {Terrain terrain = new Terrain();@Overridepublic TerrainBuilder buildWall() {terrain.w = new Wall(10, 10, 50, 50);return this;}@Overridepublic TerrainBuilder buildFort() {terrain.f = new Fort(10, 10, 50, 50);return this;}@Overridepublic TerrainBuilder buildMine() {terrain.m = new Mine(10, 10, 50, 50);return this;}@Overridepublic Terrain build() {return terrain;} }測試?
public class Main {public static void main(String[] args) {TerrainBuilder builder = new ComplexTerrainBuilder();Terrain t = builder.buildFort().buildMine().buildWall().build();} }案例二
Person類,假設(shè)有100個(gè)參數(shù)?
public class Person {int id;String name;int age;double weight;int score;Location loc;private Person() {}public static class PersonBuilder {Person p = new Person();public PersonBuilder basicInfo(int id, String name, int age) {p.id = id;p.name = name;p.age = age;return this;}public PersonBuilder weight(double weight) {p.weight = weight;return this;}public PersonBuilder score(int score) {p.score = score;return this;}public PersonBuilder loc(String street, String roomNo) {p.loc = new Location(street, roomNo);return this;}public Person build() {return p;}} }class Location {String street;String roomNo;public Location(String street, String roomNo) {this.street = street;this.roomNo = roomNo;} }測試
public class Main {public static void main(String[] args) {Person p = new Person.PersonBuilder().basicInfo(1, "zhangsan", 18)//.score(20).weight(200)//.loc("bj", "23").build();} }?
總結(jié)
以上是生活随笔為你收集整理的Builder建造者设计模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lambda中的钩子函数
- 下一篇: Adapter适配器设计模式