免费做视频网站宁波seo的公司联系方式
1.什么是建造者模式(Builder Pattern)
建造者模式(Builder Pattern)又叫生成器模式,是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象,从而达到代码复用性。
建造者模式将复杂对象的构建与对象的表现分离开来,这样使得同样的构建过程可以创建出不同的表现。
2.建造者模式的优点
在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。
- 用户只需要给出指定复杂对象的类型和内容;
- 建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)
3.实现方法(1)
我们举一个例子:我们需要开发一款手机,参数有名称,cpu,屏幕,系统,我们用建造者模式来实现这个需求。
我们需要定义一个手机类:
class MobilePhone {//手机类private String name;//名称private String cpu;//处理器private String screen;//屏幕private String sysemtype;//系统public MobilePhone() {}public void setName(String name) {this.name = name;}public void setCpu(String cpu) {this.cpu = cpu;}public void setScreen(String screen) {this.screen = screen;}public void setSysemtype(String sysemtype) {this.sysemtype = sysemtype;}public String getName() {return name;}public String getCpu() {return cpu;}public String getScreen() {return screen;}public String getSysemtype() {return sysemtype;}public void tostring() {//打印方法System.out.println("名称:" + name + "\n处理器:" + cpu + "\n屏幕:" + screen + "\n系统:" + sysemtype);}
}
我们创建一个抽象的接口 用于创建手机
interface CreateMobilePhone {//接口 用于创建手机void CreateName(String name);void CreateCpu(String cpu);void CreateScreen(String screen);void CreateSystemtype(String systemtype);MobilePhone build();
}
创建一类手机产品 实现创建接口
class Honor implements CreateMobilePhone {//一类产品的手机 实现接口private MobilePhone mobilePhone;public Honor() {mobilePhone = new MobilePhone();}@Overridepublic void CreateName(String name) {mobilePhone.setName(name);}@Overridepublic void CreateCpu(String cpu) {mobilePhone.setCpu(cpu);}@Overridepublic void CreateScreen(String screen) {mobilePhone.setScreen(screen);}@Overridepublic void CreateSystemtype(String systemtype) {mobilePhone.setSysemtype(systemtype);}@Overridepublic MobilePhone build() {return mobilePhone;}
}
测试类:
//建造者设计模式
class Main {public static void main(String[] args) {Honor honor = new Honor();honor.CreateName("V10");honor.CreateCpu("kirin970");honor.CreateScreen("2k");honor.CreateSystemtype("EMUI9.1");create(honor).tostring();}public static MobilePhone create(CreateMobilePhone createMobilePhone){return createMobilePhone.build();}}输出:
名称:V10
处理器:kirin970
屏幕:2k
系统:EMUI9.1
4.实现方法(2)
我们还有第二种实现建造者模式的方法:
例如给出一个需求需要创建一个person类其中属性有name,sex,age,score。name,sex是必须给定,其余可有可无。
实现代码如下:
class Person {//新建person类private String name;//必须给private String sex;//必须给private int age;//可给可不给private int score;//可给可不给public Person(String name,String sex,int age,int score){//构造方法this.name=name;this.sex=sex;this.age=age;this.score=score;}public String getName() {return name;}public String getSex() {return sex;}public int getAge() {return age;}public int getScore() {return score;}
}
最关键的部分如下:
class Builder {private String name;private String sex;private int age;private int score;public Builder setName(String name) {this.name = name;return this;}public Builder setSex(String sex) {this.sex = sex;return this;}public Builder setAge(int age) {this.age = age;return this;}public Builder setScore(int score) {this.score = score;return this;}public Person create() {return new Person(name, sex, age, score);}
}
我们创建了一个builder类,定义每一个方法都返回builder对象,调用create方法实例化Person对象。
下面是测试类:
//建造者设计模式
class Main {public static void main(String[] args) {Builder builder=new Builder();builder.setName("MRyan").setSex("man").setAge(20).setScore(99);Person person=builder.create();System.out.println(person.getName());}
}
输出:MRyan
5.总结
我们通过上面的例子说明,会发现使用建造者模式在创建复杂对象的时候,把创建对象成员和装配方法分离出来,放在建造者类中去实现,用户使用该复杂对象时,不用理会它的创建和装配过程和内部细节,只关心它的表示形式。不过我们也发现了缺点,如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。