Java学习笔记——设计模式之九.建造者模式
建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

Product类:
package cn.happy.design_pattern._09builder; import java.util.ArrayList;
import java.util.List; public class Product { List<String> parts = new ArrayList<>(); public void add(String part){
parts.add(part);
} public void show(){
System.out.println("创建产品...");
for (String item : parts) {
System.out.println(item);
}
}
}
Builder类:
 package cn.happy.design_pattern._09builder;
 public abstract class Builder {
     public abstract void BuildPartA();
     public abstract void BuildPartB();
     public abstract Product GetResult();
 }
Builder子类:
 package cn.happy.design_pattern._09builder;
 public class ConcreteBuilder1 extends Builder {
     private Product product = new Product();
     @Override
     public void BuildPartA() {
         product.add("部件A");
     }
     @Override
     public void BuildPartB() {
         product.add("部件B");
     }
     @Override
     public Product GetResult() {
         // TODO Auto-generated method stub
         return product;
     }
 }
 public class ConcreteBuilder2 extends Builder {
     private Product product = new Product();
     @Override
     public void BuildPartA() {
         product.add("部件X");
     }
     @Override
     public void BuildPartB() {
         product.add("部件Y");
     }
     @Override
     public Product GetResult() {
         // TODO Auto-generated method stub
         return product;
     }
 }
Director类:
 package cn.happy.design_pattern._09builder;
 public class Director {
     public void Construct(Builder builder){
         builder.BuildPartA();
         builder.BuildPartB();
     }
 }
测试类:
 package cn.happy.design_pattern._09builder;
 public class Mmain {
     public static void main(String[] args) {
         Director director = new Director();
         Builder b1 = new ConcreteBuilder1();
         Builder b2 = new ConcreteBuilder2();
         director.Construct(b1);
         b1.GetResult().show();
         director.Construct(b2);
         b2.GetResult().show();
     }
 }
Java学习笔记——设计模式之九.建造者模式的更多相关文章
- Java学习笔记——设计模式之二.策略模式
		
明确是王道 --Clean Code 先定义策略类 package cn.no2.strategy; public abstract class Strategy { //省略属性 //算法方法 pu ...
 - Java学习笔记——设计模式之四.代理模式
		
To be, or not to be: that is the question. --<哈姆雷特> 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. 上代码: p ...
 - Java学习笔记——设计模式之八.外观模式
		
外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 子系统: package cn.happy.design_patter ...
 - Java学习笔记——设计模式之七.模板方法模式
		
模板方法模式(TemplateMethod),定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 结构图: 代码: 算法骨架 ...
 - Java学习笔记——设计模式之六.原型模式(浅克隆和深克隆)
		
That there's some good in this world, Mr. Frodo. And it's worth fighting for. 原型模式(prototype),用原型实例指 ...
 - Java进阶篇设计模式之九----- 解释器模式和迭代器模式
		
前言 在上一篇中我们学习了行为型模式的责任链模式(Chain of Responsibility Pattern)和命令模式(Command Pattern).本篇则来学习下行为型模式的两个模式, 解 ...
 - Java学习笔记(十九)——Java 日志记录 AND log4j
		
[前面的话] 学习的进度应该稍微在快一点. Java日志到了必须学习怎么使用的时候了,因为在项目中要进行使用.基础性文章,选择性阅读. [结构] java日志对调试,记录运行,问题定位都起到了很重要的 ...
 - 疯狂java学习笔记之面向对象(九) - 抽象和接口
		
一.抽象(abstract): 1.抽象类: 使用abstract修饰的类就是抽象类; 相比于普通类抽象类增加了支持抽象方法的功能,但也丢失了创建实例的功能(抽象类中不能创建实例),其他普通类有的抽象 ...
 - Java学习笔记——设计模式之五.工厂方法
		
水边一只青蛙在笑 --石头和水 工厂方法模式(Factory Method),定义了一个用于创建对象的接口,让实现类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 这里在简单和工厂的基础上 ...
 
随机推荐
- 1.开始第一个MVC项目
			
安装就不说了 1.在指定路径创建好项目文件夹之后,打开cmd,进去这个文件夹路径下 输入命令 dotnet new mvc 就会在文件夹内创建一个mvc项目 2.创建好项目之后 直接在这个路径下输入 ...
 - windows下编译qt的mysql驱动
			
windows下编译qt的mysql驱动cd %QTDIR%\src\plugins\sqldrivers\mysqlqmake –o Makefile INCLUDEPATH+="C:\M ...
 - wpf listbox 选中项 上移下移
			
原文:wpf listbox 选中项 上移下移 private void MoveUp_Click(object sender, RoutedEventArgs e) { ...
 - Cocos2d-x 3.0final 终结者系列教程09-漆节点Node中间Schedule
			
怎么做HelloWorld工程HelloWorld文字实现它自己主动运动? 有的童鞋会想到使用线程.不断的变化Label的Position, 不要那样做,因为Cocos2d-x在主线程只能被改变Nod ...
 - EntityFrameworkCore 一对一 && 一对多 && 多对多配置
			
基本数据结构 表设计如下: 入学记录 public class AdmissionRecord { [Key] public long Id { get; set; } public DateTime ...
 - 一个RPC的demo (good)
			
从下面的例子中可以看到,Consumer(client)的代码中引用了Provider部分的class,本例中是 com.provider.EchoServiceImpl和com.provider.E ...
 - 使用委托实现c#,窗体与窗体之间的传值
			
主界面: Form1中的代码: namespace _06委托练习_窗体传值{ public partial class Form1 : Form { public Form ...
 - TThreadList Demo
			
type TForm1 = class(TForm) Button1: TButton; Button3: TButton; ListBox1: TListBox; Button2: TButton; ...
 - Win8 Metro(C#)数字图像处理--2.45图像雾化效果算法
			
原文:Win8 Metro(C#)数字图像处理--2.45图像雾化效果算法 [函数名称] 图像雾化 AtomizationProcess(WriteableBitmap src,i ...
 - 【JDK源码分析】String的存储区与不可变  专题
			
<Think in Java>中说:“关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系”. "=="判断的是两个对象的内存地址是否一样,适用于 ...