暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

建造者模式(builder pattern)

程序猿wangc 2018-11-20
117

1.建造者模式概念:将一个复杂对象的构建与它的表示分离,使得相同的构建过程可以创建不同的表示。
2.代码:

1)PhoneBuildwr.java(创建创建Product对象时需要的各个部件指定的抽象类接口)
/**
 * 手机建造者:
 *      提供后壳、主板、屏幕
 * @author: gnehcgnaw
 * @date: 2018/11/15 15:24
 */

public interface PhoneBuilder {

    public Screen builderScreen();

    public Motherboard builderMotherboard();

    public BackCover builderBackCover();
}

2)Phone.java(Product的抽象对象)

/**
 * 手机
 * @author: gnehcgnaw
 * @date: 2018/11/15 15:20
 */

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Phone {
    private Screen screen ;
    private Motherboard motherboard ;
    private BackCover backCover ;
}

3)PhoneBuilder.java(手机构建者接口)

/**
 * 手机建造者:
 *      提供后壳、主板、屏幕
 * @author: gnehcgnaw
 * @date: 2018/11/15 15:24
 */

public interface PhoneBuilder {

    public Screen builderScreen();

    public Motherboard builderMotherboard();

    public BackCover builderBackCover();
}

interface Screen{

}

interface Motherboard{

}

interface BackCover{

}

4)HuaWeiPhoneBuilder.java(手机构建者的具体实现)

/**
 * @author: gnehcgnaw
 * @date: 2018/11/20 22:50
 */

public class HuaWeiPhoneBuilder implements PhoneBuilder {
    @Override
    public Screen builderScreen() {
        return new HuaWeiScreen();
    }

    @Override
    public Motherboard builderMotherboard() {
        return new HuaWeiMotherboard();
    }

    @Override
    public BackCover builderBackCover() {
        return new HuaWeiBackCover();
    }
}

class HuaWeiScreen implements Screen{

}

class HuaWeiMotherboard implements Motherboard{

}

class HuaWeiBackCover implements BackCover{

}

5)PhoneDirector.java(构建指挥者)

/**
 *
 * 指挥者
 * @author: gnehcgnaw
 * @date: 2018/11/15 15:25
 */

public interface PhoneDirector {

    public Phone directorPhone(PhoneBuilder phoneBuilder);


}

6)HuaWeiPhoneDirector.java(构建的具体实现)

/**
 * 指挥者
 * @author: gnehcgnaw
 * @date: 2018/11/15 15:36
 */

public class HuaWeiPhoneDirector implements PhoneDirector {

    @Override
    public Phone directorPhone(PhoneBuilder phoneBuilder) {
        Screen screen = phoneBuilder.builderScreen();
        Motherboard motherboard = phoneBuilder.builderMotherboard();
        BackCover backCover = phoneBuilder.builderBackCover();
        return new Phone(screen,motherboard,backCover);
    }
}

7)Main.java调用者

/**
 * @author: gnehcgnaw
 * @date: 2018/11/15 15:46
 */

public class Main  {
    public static void main(String[] args{
        PhoneDirector phoneDirector = new HuaWeiPhoneDirector();
        Phone phone = phoneDirector.directorPhone(new HuaWeiPhoneBuilder());
        System.out.println(phone);
    }
}

3.开发中应用场景:
1)StringBuilder类的append方法
2)SQL中的PreparedStatement
3)JDOM中,DomBuilder、SAXBuilder


文章转载自程序猿wangc,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论