本文实例讲述了Java设计模式之建造者模式。分享给大家供大家参考,具体如下:
<>强建造者模式(builder) 强>可以将部件和其组装过程分开。一步一步创建一个复杂的对象。
用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节。
<强>什么情况下会用到建造者模式? 强>
个人理解,当我们创建的对象在创建时需要逻辑的时候。
比如,一个简单的pojo对象,我们想要创建,直接就可以新出来,没有什么逻辑。
当有一个复杂的对象,你想要创建它时,它的各个属性之间是有逻辑关系的。
一个属性赋值取值依赖于其他属性。那么这个对象的创建就不是简单的新出来的。
在创建之前,我们必须把这个逻辑写清楚。
建造模式使得客户不需要知道太多产品内部的细节。它将复杂对象的组建和表示方式封装在一个具体的建造角色中,而且由指导者来协调建造者角色来得到具体的产品实例。
<强>它的模型:强>
抽象产品类产品
包org.test.design.build;/* * *影视,书籍等作品 * @author lushuaiyin * */公共抽象类产品{ 公共字符串作者;//作者 公共int基金=0;//耗资 公共字符串workName;//作品名称 公共字符串workType;//作品类型 公共字符串内容;//其他信息 公共字符串getAuthor () { 返回作者; } 公共空间setAuthor(字符串作者){ 这一点。作者=作者; } 公共int getFunds () { 回报基金; } 公共空间setFunds (int基金){ 这一点。基金=基金; } 公共字符串getWorkName () { 返回workName; } 公共空间setWorkName(字符串workName) { 这一点。workName=workName; } 公共字符串getWorkType () { 返回workType; } 公共空间setWorkType(字符串workType) { 这一点。workType=workType; } 公共字符串getContent () { 返回内容; } 公共空间setContent(字符串内容){ 这一点。内容=内容; } 公共字符串printString () { 返回“产品=? +”作者,作者基金=白式? +”,workName=" + workName +”, workType=" + workType +”,内容=" +内容 +“]”; } } >之前具体产品类,Movie 书
包org.test.design.build; 公共类电影延伸产品{ 私人字符串演员;//主演 私人字符串主任;//导演 公共字符串getActor () { 返回的演员; } 公共空间setActor(字符串演员){ 这一点。演员=演员; } 公共字符串getDirector () { 返回主任; } 公共空间setDirector董事(String) { 这一点。导演=主管; } } >之前包org.test.design.build; 公开课书延伸产品{ 私人int价格=0; 公共int getPrice () { 回报价格; } 公共空间setPrice (int价格){ 这一点。价格=价格; } } >之前抽象建造者Builder
包org.test.design.build;/* * *对象的构建逻辑描述 *影视,书籍等作品创建步骤 * @author lushuaiyin * */公共接口生成器{ 无效招聘();//人员招募 空白writeScript();//写剧本,书 空白raiseFunds();//筹集资金 无效传播();//宣传 空白释放();//出版,发行,上映 产品buildProduct (); } >之前具体建造者MovieBuilder 累计
包org.test.design.build;/* * *电影对象的构建逻辑具体实施 * @author lushuaiyin * */公共类MovieBuilder实现Builder { 公共产品电影=新电影();//这里是上转型对象的使用/* 假如我们创建的对象只关心行为特征,那么就可以使用父类或者接口来声明对象。 这样就不会在创建的时候就不会涉及到具体对象类的其他私有属性。 如果我们在创建的时候,关心这些属性。那么就直接使用子类新出对象。 电影电影电影=new (); */公共空间招聘(){ movie.setAuthor(“詹姆斯·卡梅隆”); } 公共空间writeScript () { movie.setWorkName(“阿凡达”); } 公共空间raiseFunds () { movie.setFunds (200000); } 公共空间传播(){ movie.setContent(“首部3 d科幻巨作!”); } 公共空间释放(){ movie.setWorkType (“3 d电影”); } 公共产品buildProduct () { 返回电影; } }Java设计模式之建造者模式实例详解