设计模式:建造者模式
一个产品通常由不同的组成成分构成,这些成分构成产品的内部表象。不同的产品有不同的内部表象,也就时不同的成分。
建造者模式使客户端不关注产品的具体成分,只需要关注具体的产品。建造者对象返回给客户端的是一个由零件所构成的完全对象。
场景:建造者模式实现构建和装配的解耦,不同的构建器,相同的装配方法,构建出不同的对象。
比如:StringBuild的append方法, SAX解析中的SaxBuilder等。
/**
* 比如一个苹果手机产品,由摄像头,系统,cpu构成
*/
public class Iphone {
//摄像头
private Camera camera;
//系统
private Ios Ios;
//cpu
private AppleChip appleChip;
public Iphone(Camera camera, com.test.game.design.build.Ios ios, AppleChip appleChip) {
this.camera = camera;
Ios = ios;
this.appleChip = appleChip;
}
}
class Camera {
private String name;
public Camera(String name) {
this.name = name;
}
}
class AppleChip {
private String name;
public AppleChip(String name) {
this.name = name;
}
}
class Ios {
private String name;
public Ios(String name) {
this.name = name;
}
}
/**
* 创建一个构建者 构建 产品零件
*/
public interface IphoneBuilder {
Camera builderCamera();
Ios buildIos();
AppleChip buildAppleChip();
}
/** * 生产苹果零件 */ public class ChinaIphoneBuilder implements IphoneBuilder{ @Override public Camera builderCamera() { System.out.println("生产苹果摄像头"); return new Camera("camera"); } @Override public Ios buildIos() { System.out.println("生产苹果IOS系统"); return new Ios("IOS"); } @Override public AppleChip buildAppleChip() { System.out.println("生产苹果CPU"); return new AppleChip("cpu"); } }
/**
* 组装Iphone
*/
public interface IphoneDirector {
Iphone createIphone();
}
/**
* 生产产品
*/
public class ChinaIphoneDirector implements IphoneDirector{
private IphoneBuilder builder;
public ChinaIphoneDirector(IphoneBuilder builder) {
this.builder = builder;
}
@Override
public Iphone createIphone() {
return new Iphone(builder.builderCamera(), builder.buildIos(), builder.buildAppleChip());
}
}
/**
* 模拟调用
*/
public class Client {
public static void main(String[] args) {
IphoneDirector director = new ChinaIphoneDirector(new ChinaIphoneBuilder());
Iphone iphone = director.createIphone();
}
}
建造者模式包含以下角色:
抽象建造者(IphoneBuilder): 抽象产品零件的构造
具体建造者(ChinaIphoneBuilder):生产具体产品的零件
调用者(director):调用建造者,创建产品
具体产品(Iphone)。
建造者模式和抽象工厂模式非常相似,都能解决由多个对象构成具体产品的问题。但实际上还是存在区别
抽象工厂中每一次工厂对象被调用时都返回一个完整的对象,而调用者可能会使用这个对象,也有可能作用
与其他的对象。也就是工厂产生的对象可能不是最终对象,也可能是。而建造者模式则不同,生成的对象是
完整的。生成的过程发生在建造者内部。可以由抽象工厂来生成建造者模式需要的对象。

浙公网安备 33010602011771号