java建造者模式 #5

Posted 6 years ago · 1 mins reading

建造者模式(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{
@Override
Sofa sofa(){
return new Sofa(){
...
}
};
@Override
Knife knife(){
return new Knife(){
...
}
};
@Override
Bed bed(){
return new Bed(){
...
}
};
@Override
TV tv(){
return new TV(){
...
}
};
}

房间装配实现类

java
public RoomAssembleImpl implements RoomAssemble{
private RoomBuilder builder;
@Override
public 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{
@Override
String name(){
return "沙发";
};
@Override
Room room(){
return new Bedroom();
};
@Override
Interger price(){
return 3000;
};
}
public class TV implements Furniture{
@Override
String name(){
return "电视";
};
@Override
Room room(){
return new Bedroom();
};
@Override
Interger price(){
return 8000;
};
}
public class Bed implements Furniture{
@Override
String name(){
return "床";
};
@Override
Room room(){
return new Bedroom();
};
@Override
Interger price(){
return 120000;
};
}
java
public class knife implements Furniture{
@Override
String name(){
return "刀";
};
@Override
Room room(){
return new Kitchen();
};
@Override
Interger price(){
return 100;
};
}

以上就结束了。
我在例子上把能装配的都装配了,然后装配只进行了一层装配,比较简单。
你也可以只装配几个家具来组装不同的房间,这就是建造者模式的意义。自定义构建你想要的整体。

你也可以选择我下面的扩展代码,装配个房子,先把家具塞进房间,然后再将你选择的不同的房间装配进房子,来构造各式各样的房子。

实现room接口

java
public class Kitchen implements room{
@Override
String name(){
return "厨房";
};
}
public class Bedroom implements room{
@Override
String name(){
return "卧室";
};
}

实现Furniture接口

java
public class Oven implements Furniture{
@Override
String name(){
return "烤箱";
};
@Override
Room room(){
return new Kitchen();
};
@Override
Interger price(){
return 500;
};
}
java
public class Pan implements Furniture{
@Override
String name(){
return "平底锅";
};
@Override
Room room(){
return new Kitchen();
};
@Override
Interger price(){
return 200;
};
}