博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java设计模式----建造者模式
阅读量:4665 次
发布时间:2019-06-09

本文共 1780 字,大约阅读时间需要 5 分钟。

建造者模式使用场景:将复杂的实现与应用进行分离。主要有四个类:产品类(Product)、建造抽象类(Builder)、建造实现类(ConcreteBuilder)、指挥者类(Director)。建造者模式仅仅只比工厂模式多了一个“指挥类”的角色。在建造者模式图中,假如把这个指挥类看做是最终调用的客户端,那么图中剩余的部分就可以看作是一个简单的工厂模式了。与工厂模式相比,建造者模式一般用来创建更为复杂的对象,因为对象的创建过程更为复杂,因此将对象的创建过程独立出来组成一个新的类——指挥类。

产品类

package build;public class Product {	private String food;	private String water;	public Product() {	}	public Product(String food, String water) {		this.food = food;		this.water = water;	}	public String getFood() {		return food;	}	public void setFood(String food) {		this.food = food;	}	public String getWater() {		return water;	}	public void setWater(String water) {		this.water = water;	}}

 

抽象建造者类:这个类中有抽象的产品建造方法和抽象的产品返回方法

package build;public interface Builder {	public void  eat();	public void drink();	public Product getProduct();}

 

具体建造者类

package build;public class ConcreteBuilder implements Builder{	Product product=new Product();	@Override	public void eat() {		product.setFood("面包");	}	@Override	public void drink() {		product.setWater("依云矿泉水");	}	@Override	public Product getProduct() {		return product;	}}

 

指挥者类:构建一个使用Builder接口的对象, 负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。

package build;public class Director {	private Builder builder;	//传入构建对象	public Director(Builder builder){		this.builder=builder;	}	//实现构建	public void construct(){		this.builder.eat();		this.builder.drink();	}}

 

客户端类测试

package build;public class Client {	public static void main(String[] args) {		//创建实例		Builder builder=new ConcreteBuilder();		//传入实例		Director director=new Director(builder);		//构建		director.construct();		//获取产品		Product product=builder.getProduct();		//获取结果		System.out.println(product.getFood());		System.out.println(product.getWater());	}	}

 

结果

面包依云矿泉水

 

转载于:https://www.cnblogs.com/JAYIT/p/5054636.html

你可能感兴趣的文章
线程同步工具 Semaphore类的基础使用
查看>>
Bug的等级程度(Blocker, Critical, Major, Minor/Trivial)及修复优先级
查看>>
js多图预览及上传功能
查看>>
Mac下安装ionic和cordova,并生成iOS项目
查看>>
caffe介绍
查看>>
MongoDB副本集和分片模式安装
查看>>
Spring Mvc Url和参数名称忽略大小写
查看>>
Python之常用模块学习(一)
查看>>
CSS------如何让大小不一样的div顶部对齐
查看>>
SOCKET.IO 前后端使用
查看>>
CodeForces 122G Lucky Array(一脸懵逼的树状数组)
查看>>
【开发实例】C#调用SAPI实现语音合成的两种方法
查看>>
Django实战(15):Django实现RESTful web service
查看>>
离散实验二
查看>>
使用sharepoint里Open with explorer功能
查看>>
通过模糊来弱化背景
查看>>
The Fourth Day
查看>>
NSString 比较(转)
查看>>
[hdu3631]背包或中途相遇法
查看>>
模块化开发(seajs)
查看>>