首先说说建造者模式要解决一个什么样的问题:
流程控制,即保证方法先后顺序正确且没有遗漏.用于灵活指导操作细节.
建造者模式包括:
一个导演类:用于规定操作顺序
一个建造者接口:用于规定建造者的操作
具体的建造者:建造者的具体实现类
例如:
打开需要继续编写的文件A
继续编写A
关闭A
打开需要重新编写的文件B
删除B文件内容
输入内容
关闭B
其实设计思想大多差不多,就是不要有重复代码,尽量的依赖抽象,反应在编码上,就是尽量的用接口去适配;
流程控制,即保证方法先后顺序正确且没有遗漏.用于灵活指导操作细节.
建造者模式包括:
一个导演类:用于规定操作顺序
一个建造者接口:用于规定建造者的操作
具体的建造者:建造者的具体实现类
例如:
public class BuilderTest {
public static void main(String[] args) {
FileBuilder appendFilebuilder=new AppendFilebuilder();
FileBuilder rewriteFilebuilder=new RewriteFilebuilder();
FileDirector fileDirector=new FileDirector();
fileDirector.operateFile(appendFilebuilder);
fileDirector.operateFile(rewriteFilebuilder);
}
}
class FileDirector {
/*FileBuilder fileBuilder;
public FileDirector(FileBuilder fileBuilder) {
this.fileBuilder=fileBuilder;//如果只有一个指导方法可以,直接将builder当做方法参数
}*/
public void operateFile(FileBuilder fileBuilder) {
fileBuilder.openFile();
fileBuilder.editFile();
fileBuilder.closeFile();
}
}
interface FileBuilder{
void openFile();
void editFile();
void closeFile();
}
class AppendFilebuilder implements FileBuilder{
@Override
public void openFile() {
System.out.println("打开需要继续编写的文件A");
}
@Override
public void editFile() {
System.out.println("继续编写A");
}
@Override
public void closeFile() {
System.out.println("关闭A");
}
}
class RewriteFilebuilder implements FileBuilder{
@Override
public void openFile() {
System.out.println("打开需要重新编写的文件B");
}
@Override
public void editFile() {
System.out.println("删除B文件内容");
System.out.println("输入内容");
}
@Override
public void closeFile() {
System.out.println("关闭B");
}
}
结果:打开需要继续编写的文件A
继续编写A
关闭A
打开需要重新编写的文件B
删除B文件内容
输入内容
关闭B
其实设计思想大多差不多,就是不要有重复代码,尽量的依赖抽象,反应在编码上,就是尽量的用接口去适配;