2020年7月31日星期五

无废话设计模式(3)建造者模式

0-前言

  建造者模式也是创建型模式的一种,先简单介绍下它的几部分(不画UML图,直接看代码哈):

  A、产品(Product):描述一个由一系列部件组成较为复杂的对象。

  B、抽象建造者(builder):建造者的公共接口,一般用来定义建造细节的方法,并不涉及具体的对象部件的创建。

  C、具体建造者(ConcreteBuilder):描述具体建造者,并实现抽象建造者公共接口。

  D、指挥者(Director):调用具体建造者来创建复杂对象的各个部分,并按照一定顺序来建造复杂对象。

 

1-建造者模式实现

1-1、产品(Product)

//1、产品对象(product)class Phone{ private String Mainboard; //主板 private String Screen; //屏幕 private String Shell; //外壳 public String getMainboard() {  return Mainboard; } public void setMainboard(String mainboard) {  Mainboard = mainboard; } public String getScreen() {  return Screen; } public void setScreen(String screen) {  Screen = screen; } public String getShell() {  return Shell; } public void setShell(String shell) {  Shell = shell; } @Override public String toString() {  return "Phone{" +    "Mainboard='" + Mainboard + '\'' +    ", Screen='" + Screen + '\'' +    ", Shell='" + Shell + '\'' +    '}'; }}

 

1-2、抽象建造者(builder)

//2、抽象建造者(Builder)abstract class Builder{ abstract void bulidMainboard(); //建造主板 abstract void bulidScreen(); //建造屏幕 abstract void bulidShell(); //建造外壳 //完工-返回手机产品 abstract Phone getPhone();}

 

1-3、具体建造者(ConcreteBuilder)

//3、具体建造者class IphoneBuilder extends Builder{ private Phone phone; public IphoneBuilder() {  phone = new Phone(); } @Override void bulidMainboard() {  phone.setMainboard("安装了苹果手机主板!"); } @Override void bulidScreen() {  phone.setScreen("安装了苹果手机的屏幕!"); } @Override void bulidShell() {  phone.setShell("安装了苹果手机的外壳!"); } @Override public Phone getPhone() {  return phone; }}

 

1-4、指挥者(Director)

//4、指挥者(Director)
class Director
{
//指挥工人按顺序建造手机
public Phone create(Builder builder)
{
builder.bulidMainboard();
builder.bulidScreen();
builder.bulidShell();
return builder.getPhone();
}
}

1-5、客户端:

  Director director =new Director();  Phone phone = director.create(new IphoneBuilder());  System.out.println(phone.toString());

 

2-简单总结

优点:

1、产品的建造和表示分离,实现了解耦。

2、将复杂产品的创建步骤形成统一

3、增加新的具体建造者无需修改原有类库的代码,易于拓展,符合“开闭原则“。

缺点:

1、产品必须有共同点,限制了使用范围。

2、如内部变化复杂,会有很多的建造类,难以维护。

 

适用场景:

1、需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;

2、隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。

3、需要生成的对象内部属性本身相互依赖。

4、适合于一个具有较多的零件(属性)的产品(对象)的创建过程。

 

无废话设计模式(3)建造者模式亚马逊点滴常识跟我学Wish政策财务管理wish开启升级版EPC,包裹标准、选品操作、订单履行方式大不同!商务部:对原产于美国和欧盟的进口相关高温承压用合金钢无缝钢管反倾销措施公告!干货|亚马逊卖家可以在不降低价格的情况下赢得Buy Box吗?2017情人节,深圳最适合情侣表白的地方有哪些呀?2017年深圳春节哪里有庙会?2017深圳元宵节去哪玩?元宵一样赏月去

没有评论:

发表评论