欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > asp.net >内容正文

asp.net

Builder建造者设计模式

发布时间:2025/1/21 asp.net 83 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Builder建造者设计模式 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

目录

案例一 

案例二


 

使用场景:当构建一个复杂的对象需要传入很多参数的时候,或者是一个对象的属性有很多,但是使用时也许只需要这个对象的几个属性,如果使用构造器的话,就得将不需要的参数也传个null进去,比方说一个对象有100个属性,但是我只需要里面的2个属性,那我得new对象时传98个null进去,这两种情况下就可以选择使用建造者模式。 

案例一 

实体类 

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;} }

 接口

每个方法的返回值都是TerrainBuilder对象,就可以实现链式编程。

public interface TerrainBuilder {TerrainBuilder buildWall();TerrainBuilder buildFort();TerrainBuilder buildMine();Terrain build(); }

实现 

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类,假设有100个参数 

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();} }

 

总结

以上是生活随笔为你收集整理的Builder建造者设计模式的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。