建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。
通过一个例子来演示代码:
比如我们要装修我们的卧室和厨房。也就是组装卧室和厨房。
我们先创建两个类,一个表明家具,一个表明房间。
房间接口
java
public interface Room{Sofa sofa();Knife knife();Bed bed();TV tv();}
家具接口
java
public interface Furniture{String name();Room room();Integer price();}
房间建造接口
java
public interface RoomBuilder{Sofa buliderSofa();Knife buliderKnife();Bed buliderBed();TV buliderTV();}
房间装配接口
java
public interface RoomAssemble{Room roomBulder();}
房间建造实现类
java
public class RoomBuilderImpl implements RoomBuilder{@OverrideSofa sofa(){return new Sofa(){...}};@OverrideKnife knife(){return new Knife(){...}};@OverrideBed bed(){return new Bed(){...}};@OverrideTV tv(){return new TV(){...}};}
房间装配实现类
java
public RoomAssembleImpl implements RoomAssemble{private RoomBuilder builder;@Overridepublic Room roomBulder(){Sofa sofa = builder.builderSofa();Knife knife = builder.buliderKnife();Bed bed = builder.builderBed();TV tv = builder.builderTV();Room room = new Room();room.setSofa(sofa);room.setKnife(knife);room.setBed(bed);room.setTV(tv);return room;};...构造器}
家具类
java
public class Sofa implements Furniture{@OverrideString name(){return "沙发";};@OverrideRoom room(){return new Bedroom();};@OverrideInterger price(){return 3000;};}public class TV implements Furniture{@OverrideString name(){return "电视";};@OverrideRoom room(){return new Bedroom();};@OverrideInterger price(){return 8000;};}public class Bed implements Furniture{@OverrideString name(){return "床";};@OverrideRoom room(){return new Bedroom();};@OverrideInterger price(){return 120000;};}
java
public class knife implements Furniture{@OverrideString name(){return "刀";};@OverrideRoom room(){return new Kitchen();};@OverrideInterger price(){return 100;};}
以上就结束了。
我在例子上把能装配的都装配了,然后装配只进行了一层装配,比较简单。
你也可以只装配几个家具来组装不同的房间,这就是建造者模式的意义。自定义构建你想要的整体。
你也可以选择我下面的扩展代码,装配个房子,先把家具塞进房间,然后再将你选择的不同的房间装配进房子,来构造各式各样的房子。
实现room接口
java
public class Kitchen implements room{@OverrideString name(){return "厨房";};}public class Bedroom implements room{@OverrideString name(){return "卧室";};}
实现Furniture接口
java
public class Oven implements Furniture{@OverrideString name(){return "烤箱";};@OverrideRoom room(){return new Kitchen();};@OverrideInterger price(){return 500;};}
java
public class Pan implements Furniture{@OverrideString name(){return "平底锅";};@OverrideRoom room(){return new Kitchen();};@OverrideInterger price(){return 200;};}