『学習ノート』のJAVAデザインモデル--建造者モデル


          《        》      ,        :
      :         :     (Builder)

前言
            ,           ,               ,   corn                  。

一、建設者モデルとは何か
Builder                ,  GoF   23         ,      :                 ,                  。
GoF        ,    ,       :                   (     ,       ,         ),              ,                                       (             ),               ,Builder                            ,                 ,                     ,               ,                 ,             。


建造者模式适合于创建比较复杂的对象,所谓复杂有两个方向:
-       ,           。
-          ,            。

以上の2種類の複雑なオブジェクトBuilderモードに対してもそれぞれ2つの表現形式が進化した.
1つ目:Product、ConcreteBuilder、Builder、Directorによって形成されたコンストラクタモード

       ,  Builder    4   :  (Product),     (ConcreteBuilder),   (Builder),   (Director)

   :      ,               

                     ,          、     ,      ,       ,    ,      ,  ...,                       Builder     。

                       ,              。
public class SysApplication {
	//         
	private String data;
	//     
	private String operationSystem;
	//   
	private String driver;
	//          
	private String usefulSoftware;
	public String getData() {
		return data;
	}
	public void setData(String data) {
		this.data = data;
	}
	public String getOperationSystem() {
		return operationSystem;
	}
	public void setOperationSystem(String operationSystem) {
		this.operationSystem = operationSystem;
	}
	public String getDriver() {
		return driver;
	}
	public void setDriver(String driver) {
		this.driver = driver;
	}
	public String getUsefulSoftware() {
		return usefulSoftware;
	}
	public void setUsefulSoftware(String usefulSoftware) {
		this.usefulSoftware = usefulSoftware;
	}
}

     ISysInstallBuilder                      ,        Builder         。
public interface ISysInstallBuilder {
	//     
	public void backupdata();
	//      
	public void formatDisk();
	//     
	public void copyData();
	//       
	public void installOperationSystem();
	//     
	public void installDriver();
	//        
	public void installUsefulSoftware();
	//         
	public SysApplication getSystemApplication();
}

          Windows XP         WinXpInstallBuilder,      Windows XP     。
public class WinXpInstallBuilder implements ISysInstallBuilder {
	private SysApplication systemApplication = new SysApplication();
	@Override
	public void backupdata() {
		//             
		System.out.println("    ");
	}
	@Override
	public void formatDisk() {
		//              
		System.out.println("     ");
	}
	@Override
	public void copyData() {
		//             
		System.out.println("    ");
		this.systemApplication.setData("        ");
	}
	@Override
	public void installOperationSystem() {
		//       Windows XP        
		System.out.println("  Windows XP    ");
		this.systemApplication.setOperationSystem("Windows XP");
	}
	@Override
	public void installDriver() {
		//       Windows XP      
		System.out.println("  Windows XP  ");
		this.systemApplication.setDriver("Windows XP  ");
	}
	@Override
	public void installUsefulSoftware() {
		//       Windows XP             
		System.out.println("  Windows XP         ");
		this.systemApplication.setUsefulSoftware("Windows XP         ");
	}
	@Override
	public SysApplication getSystemApplication() {
		//          
		return this.systemApplication;
	}
}
              WinXpInstallBuilder,                 。
public class MainClass {
	public static void main(String[] args) {
		//     WinXpInstallBuilder
		ISysInstallBuilder builder = new WinXpInstallBuilder();
		//   WinXpInstallBuilder,      
		builder.backupdata();
		builder.copyData();
		builder.formatDisk();
		builder.installDriver();
		builder.installOperationSystem();
		builder.installUsefulSoftware();
		//          
		SysApplication sysApplication = builder.getSystemApplication();
		System.out.println("----------      ----------");
		System.out.println("  :" + sysApplication.getData());
		System.out.println("  :" + sysApplication.getDriver());
		System.out.println("    :" + sysApplication.getOperationSystem());
		System.out.println("  :" + sysApplication.getUsefulSoftware());
	}
}
    
    
     
  Windows XP  
  Windows XP    
  Windows XP         
----------      ----------
  :Windows XP  
    :Windows XP
  :Windows XP         

         ,             ,              ,                       ,                。
             ,                      ,                        ?           。
public class SysInstallDirector {
	private ISysInstallBuilder builder;
	public SysInstallDirector(ISysInstallBuilder builder) {
		this.builder = builder;
	}
	public void installSystem() {
		builder.backupdata();
		builder.formatDisk();
		builder.installOperationSystem();
		builder.installDriver();
		builder.installUsefulSoftware();
		builder.copyData();
	}
}
public class MainClass {
	public static void main(String[] args) {
		//     WinXpInstallBuilder
		ISysInstallBuilder builder = new WinXpInstallBuilder();
		//       
		SysInstallDirector director = new SysInstallDirector(builder);
		//                  
		director.installSystem();
		//                
		SysApplication sysApplication = builder.getSystemApplication();
		System.out.println("----------      ----------");
		System.out.println("  :" + sysApplication.getData());
		System.out.println("  :" + sysApplication.getDriver());
		System.out.println("    :" + sysApplication.getOperationSystem());
		System.out.println("  :" + sysApplication.getUsefulSoftware());
	}
}
    
     
  Windows XP    
  Windows XP  
  Windows XP         
    
----------      ----------
  :Windows XP  
    :Windows XP
  :Windows XP         

          ,              。
            Win7         Win7InstallBuilder。
public class Win7InstallBuilder implements ISysInstallBuilder {
	private SysApplication systemApplication = new SysApplication();
	@Override
	public void backupdata() {
		//             
		System.out.println("    ");
	}
	@Override
	public void formatDisk() {
		//              
		System.out.println("     ");
	}
	@Override
	public void copyData() {
		//             
		System.out.println("    ");
		this.systemApplication.setData("        ");
	}
	@Override
	public void installOperationSystem() {
		//         Win7        
		System.out.println("  Win7    ");
		this.systemApplication.setOperationSystem("Win7");
	}
	@Override
	public void installDriver() {
		//         Win7      
		System.out.println("  Win7  ");
		this.systemApplication.setDriver("Win7  ");
	}
	@Override
	public void installUsefulSoftware() {
		//         Win7             
		System.out.println("  Win7         ");
		this.systemApplication.setUsefulSoftware("Win7         ");
	}
	@Override
	public SysApplication getSystemApplication() {
		//          
		return this.systemApplication;
	}
}
 MainClass       Win7  。
public class MainClass {
	public static void main(String[] args) {
		//     Win7InstallBuilder
		ISysInstallBuilder builder = new Win7InstallBuilder();
		//        
		SysInstallDirector director = new SysInstallDirector(builder);
		//                   
		director.installSystem();
		//                
		SysApplication sysApplication = builder.getSystemApplication();
		System.out.println("----------      ----------");
		System.out.println("  :" + sysApplication.getData());
		System.out.println("  :" + sysApplication.getDriver());
		System.out.println("    :" + sysApplication.getOperationSystem());
		System.out.println("  :" + sysApplication.getUsefulSoftware());
	}
}
    
     
  Win7    
  Win7  
  Win7         
    
----------      ----------
  :Win7  
    :Win7
  :Win7         

Win7        ,Builder                                ,                                ,               。

2 : クラスによる なオブジェクトの
         PersonalInfo,          :    ,  ,  ,  ,  ,    。
public class PersonalInfo {
	private String name;
	private int age;
	private String gender;
	private String address;
	private String iDNumber;
	private String phoneNumber;
	public String getPhoneNumber() {
		return phoneNumber;
	}
	public String getAddress() {
		return address;
	}
	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
	public String getGender() {
		return gender;
	}
	public String getIDNumber() {
		return iDNumber;
	}
	public static class Builder {
		private String name;
		private int age;
		private String gender;
		private String address;
		private String iDNumber;
		private String phoneNumber;
		public Builder(String name) {
			this.name = name;
		}
		public Builder phoneNumber(String phoneNumber) {
			this.phoneNumber = phoneNumber;
			return this;
		}
		public Builder address(String address) {
			this.address = address;
			return this;
		}
		public Builder age(int age) {
			this.age = age;
			return this;
		}
		public Builder gender(String gender) {
			this.gender = gender;
			return this;
		}
		public Builder iDNumber(String iDNumber) {
			this.iDNumber = iDNumber;
			return this;
		}
		public PersonalInfo build() {
			return new PersonalInfo(this);
		}
	}
	private PersonalInfo(Builder builder) {
		this.address = builder.address;
		this.age = builder.age;
		this.gender = builder.gender;
		this.iDNumber = builder.iDNumber;
		this.name = builder.name;
		this.phoneNumber = builder.phoneNumber;
	}
}
 MainClass               。
public class MainClass {
	public static void main(String[] args) {
		PersonalInfo personalInfo = new PersonalInfo.Builder("   ")
				.address("   ").age(19).gender(" ").build();
		System.out.println("------------    ----------------");
		System.out.println("  :"+personalInfo.getName());
		System.out.println("  :"+personalInfo.getAddress());
		System.out.println("  :"+personalInfo.getAge());
		System.out.println("  :"+personalInfo.getGender());
	}
}

------------    ----------------
  :19

               ,              ,       ,            。



-                                  。
-                       。
-           :