建造者(Builder)模式设计原理
建造者模式
也是属于创建模式
的一种,该设计模式提供了一种较为复杂的创建对象并调用其中方法的方式。
一个较为普遍的建造者模式主要是使用多个接口分别定义了相应的规范,其中一个接口提供了获得其他接口的实现类的
对象的方法
。又有多个抽象类
去实现
这个接口,这些抽象类也分别有多个或一个子类
,这些子类重写了抽象类中继承
了该接口的方法。又创建了一个类①
,用一个集合去装载我们创建的多个抽象类的子类对象,里面包括了各种方法去完成对子类的记录,展示等功能。最后再创建一个Builder类
去获取类①的对象。
下面举一个购买水果与蔬菜的Builder模式实例。
建造者模式的设计原理图如下:
建造者(Buider)模式代码设计
1、接口的设计
Food接口
,提供了一些实现类公共的抽象方法来展示实现类的属性和特征,并提供另一个方法用来接收其他接口的实现类的对象
public interface Food {
String name();
int price();
BuyType getBuyType();
}
BuyType接口
,进行编写一些抽象方法供实现类重写,提供给其它接口的实现抽象类去获得
public interface BuyType {
String buType();
}
2、BuyType接口的实现类设计
OnlineShopping类
,可以用于描述另一个主接口(Food)中
的某一种实现方式或特性。在该实例中代表购买方式
public class OnlineShopping implements BuyType{
@Override
public String buType() {
return "OnlineShopping";
}
}
VegetableMarket类
,可以用于描述另一个主接口(Food)中
的某一种实现方式或特性。在该实例中代表购买方式
public class VegetableMarket implements BuyType{
@Override
public String buType() {
return "VegetableMarket";
}
}
3、抽象类的设计
Fruit类
,获得了实现接口中的方法,并重写方法getBuyType()
获取其他接口实现类的对象
public abstract class Fruit implements Food{
@Override
public BuyType getBuyType() {
return new OnlineShopping();
}
}
Vegetable类
,获得了实现接口中的方法,并重写方法getBuyType()
获取其他接口实现类的对象
public abstract class Vegetable implements Food{
@Override
public BuyType getBuyType() {
return new VegetableMarket();
}
}
4、抽象类的实现类
Fruit 抽象类的子类,重写继承自父类(以及抽象类从接口中获取的)的抽象方法。完善每一个类代表对象的属性信息等
Apple类
,返回苹果的name 以及 价格
public class Apple extends Fruit{
@Override
public String name(