建造者模式
一、基本介绍
- 建造者模式又名生成这模式,是一种对象构建模式。
- 建造者模式用于将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造不同表现(属性)得对象
建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。
建造者模式中的4个角色:
Product(产品角色):一个具体的产品对象
Builder(抽象建造者):创建一个Product对象。约定规范构建和装配产品的各个部件(方法)
ConcreteBuilder(具体建造者):实现接口,构建和装配各个部件(方法)
Director(指挥者):构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象。
它主要的两个作用:
(1)隔离客户与对象的生成过程
(2)负责控制产品对象的生产过程
二、普通方式建造对象
1、介绍
优点:简单、好理解、容易操作
缺点:
该方式建造对象,过于简单,没有设计缓冲层对象,程序的扩展和维护不好。这种设计方式将产品(饺子)和创建产品的过程(做饺子的过程)封装在一起,耦合性增强
而建造者模提供的解决方案就是将产品和产品建造过程解耦。
2、代码
/*** 抽象饺子类*/public abstract class AbstractDumplings {//擀面皮public abstract void crust();//添加馅料public abstract void stuffing();//煮饺子public abstract void boil();public void build(){crust();stuffing();boil();}}
/*** 牛肉饺子*/public class BeefDumplings extends AbstractDumplings{@Overridepublic void crust() {System.out.println("擀牛肉饺子面皮");}@Overridepublic void stuffing() {System.out.println("包牛肉饺子");}@Overridepublic void boil() {System.out.println("煮牛肉饺子");}}
/*** 猪肉饺子*/public class PorkDumplings extends AbstractDumplings{@Overridepublic void crust() {System.out.println("擀猪肉饺子面皮");}@Overridepublic void stuffing() {System.out.println("包猪肉饺子");}@Overridepublic void boil() {System.out.println("煮猪肉饺子");}}
public class Test {public static void main(String[] args) {BeefDumplings beefDumplings = new BeefDumplings();beefDumplings.build();System.out.println("----------------------------");PorkDumplings porkDumplings = new PorkDumplings();porkDumplings.build();}}
三、建造者模式
1、介绍
Product(产品角色):Dumplings
Builder(抽象建造者):DumplingsBuilder
ConcreteBuilder(具体建造者):BeefDumplings、PorkDumplings
Director(指挥者):DumplingsDirector
2、UML
3、代码实现
/*** 饺子*/public class Dumplings {//面皮private String crust;//馅料private String stuffing;//煮private String boil;public String getCrust() {return crust;}public void setCrust(String crust) {this.crust = crust;}public String getStuffing() {return stuffing;}public void setStuffing(String stuffing) {this.stuffing = stuffing;}public String getBoil() {return boil;}public void setBoil(String boil) {this.boil = boil;}}
/*** 饺子构建者*/public abstract class DumplingsBuilder {Dumplings dumplings = new Dumplings();//擀面皮public abstract void crust();//添加馅料public abstract void stuffing();//煮饺子public abstract void boil();public Dumplings build() {return dumplings;}}
/*** 牛肉饺子*/public class BeefDumplings extends DumplingsBuilder {@Overridepublic void crust() {System.out.println("擀牛肉饺子面皮");}@Overridepublic void stuffing() {System.out.println("包牛肉饺子");}@Overridepublic void boil() {System.out.println("煮牛肉饺子");}}
/*** 猪肉饺子*/public class PorkDumplings extends DumplingsBuilder {@Overridepublic void crust() {System.out.println("擀猪肉饺子面皮");}@Overridepublic void stuffing() {System.out.println("包猪肉饺子");}@Overridepublic void boil() {System.out.println("煮猪肉饺子");}}
/*** 饺子指挥者*/public class DumplingsDirector {private DumplingsBuilder dumplingsBuilder = null;public DumplingsDirector(DumplingsBuilder dumplingsBuilder){this.dumplingsBuilder = dumplingsBuilder;}/*** 获取饺子* @return*/public Dumplings getDumplings() {dumplingsBuilder.crust();dumplingsBuilder.stuffing();dumplingsBuilder.boil();return dumplingsBuilder.build();}}
public class Test {public static void main(String[] args) {DumplingsDirector dumplingsDirector = new DumplingsDirector(new BeefDumplings());dumplingsDirector.getDumplings();System.out.println("----------------------------------------------------------");DumplingsDirector dumplingsDirector2 = new DumplingsDirector(new PorkDumplings());dumplingsDirector2.getDumplings();}}
