BuilderPattern(23种设计模式之一)
设计模式六大原则(1):单一职责原则
设计模式六大原则(2):里氏替换原则
设计模式六大原则(3):依赖倒置原则
设计模式六大原则(4):接口隔离原则
设计模式六大原则(5):迪米特法则
设计模式六大原则(6):开闭原则
BuilderPattern,UML抽象图百度找,代码实现如下
使用生成器模式设计一个构造复杂类的过程。
抽象生成器
package BuilderPattern;
public interface IVehicleBuilder {
public void buildPartA();
public void buildPartB();
public Product getProduct();
}
具体生成器
package BuilderPattern.ConcreteBuilder;
import BuilderPattern.IVehicleBuilder;
import BuilderPattern.Product;
public class ConcreteBuilder1 implements IVehicleBuilder {
private Product product = new Product();
public void buildPartA() {
// TODO Auto-generated method stub
product.addPart("PartA");
}
public void buildPartB() {
// TODO Auto-generated method stub
product.addPart("PartB");
}
public Product getProduct() {
// TODO Auto-generated method stub
if(product!=null)
return product;
else
return null;
}
}
package BuilderPattern.ConcreteBuilder;
import BuilderPattern.IVehicleBuilder;
import BuilderPattern.Product;
public class ConcreteBuilder2 implements IVehicleBuilder {
private Product product = new Product();
public void buildPartA() {
// TODO Auto-generated method stub
product.addPart("PartX");
}
public void buildPartB() {
// TODO Auto-generated method stub
product.addPart("PartY");
}
public Product getProduct() {
// TODO Auto-generated method stub
if(product!=null)
return product;
else
return null;
}
}
指导者
package BuilderPattern;
public class Director {
public void construct(IVehicleBuilder builder){
builder.buildPartA();
builder.buildPartB();
}
}
具体产品
package BuilderPattern;
import java.util.ArrayList;
public class Product {
private ArrayList<String> product = new ArrayList<String>();
public void addPart(String partName){
product.add(partName);
}
public void showProduct(){
for (String part : product) {
System.out.println(part);
}
}
}
测试类
package BuilderPattern;
import BuilderPattern.ConcreteBuilder.ConcreteBuilder1;
import BuilderPattern.ConcreteBuilder.ConcreteBuilder2;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Director director=new Director(); //指导者,指导具体生成器构造产品
/*
* 生成AB
* */
IVehicleBuilder concreteBuilder1=new ConcreteBuilder1();
director.construct(concreteBuilder1);
Product product1=concreteBuilder1.getProduct();
product1.showProduct();
/*
* 生成XY
* */
IVehicleBuilder concreteBuilder2=new ConcreteBuilder2();
director.construct(concreteBuilder2);
Product product2=concreteBuilder2.getProduct();
product2.showProduct();
}
}
在实际的软件系统中,各个子部分对象完全有可能通过相应的工厂方法来生成,然后再交由生成器按照特定的构建算法将其组装成一个完整的“复杂对象”。
生成器模式的本质:分离整体构建算法和部件构造表示。构建一个复杂对象,需要将整体的构建过程与复杂对象子部件的构建过程分离开来,这样才能使得程序结构更松散、易扩展,复用性好,同样也会使代码逻辑更清晰,意图更明显。生成器模式的重心还是在于分离整体构建算法与子部件的构建,分步骤构建对象只不过是整体构建算法的一个简单表现,或者说是一个附带产物。
别嫌弃我没写注释,这个代码很简单,注释省略,嘿嘿。
BuilderPattern(23种设计模式之一)的更多相关文章
- Java开发中的23种设计模式详解
[放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...
- Java开发中的23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- Java开发中的23种设计模式(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- c#中的23种设计模式
C# 23种设计模式汇总 创建型模式 工厂方法(Factory Method) 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节.工厂方法模式的核 ...
- Java 23种设计模式
转自: http://zz563143188.iteye.com/blog/1847029 ; i<count; i++){ list.add(new MailSender()); } } pu ...
- 从追MM谈Java的23种设计模式(转)
从追MM谈Java的23种设计模式 这个是从某个文章转载过来的.但是忘了原文链接.如果知道的,我追加一下. 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西 ...
- java 23种设计模式及具体例子 收藏有时间慢慢看
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式 ...
- JAVA:23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- 从追MM谈Java的23种设计模式
从追MM谈Java的23种设计模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯 德基,只管向服务员说“来四个鸡 ...
- 23种设计模式全解析 (java版本)
转自:http://blog.csdn.net/longyulu/article/details/9159589 其中PHP常用的五种设计模式分别为:工厂模式,单例模式,观察者模式,策略模式,命令模式 ...
随机推荐
- 使用javah生成jni 头文件和使用ndk编译so库
1.jni 首先clean Project,在makeProject生成对应的class文件 然后点出命名框,输入命令: cd app/build/intermediates/classes/debu ...
- Eclipse插件开发_学习_01_Maven+Tycho 构建RCP程序
二.参考资料 1.用Tycho来构建你的RCP程序(一) —— Plugin
- nyoj-1011-So Easy[II] (多边形面积求解)
题目链接 /* Name:nyoj-1011-So Easy[II] Copyright: Author: Date: 2018/4/26 17:12:09 Description: 将多边形,从第一 ...
- hdu-5183-Negative and Positive (NP)(hash模板)
题目链接 #include <iostream> #include <cstdio> #include <cstring> #include <algorit ...
- mysql5.6之 传输表空间迁移表或恢复误删除的表
一,简单说明: 1),传输表空间的限制: 1,mysql 版本 5.6.6 及其以上,并且版本建议源和目标版本建议都是GA版并且大版本一样 2,表引擎为innodb并且开启独立表空间 innod ...
- JavaScript函数的默认参数(default parameter)
JavaScript函数的默认参数(default parameter) js函数参数的默认值都是undefined, ES5里,不支持直接在形参里写默认值.所以,要设置默认值,就要检测参数是否为un ...
- setcookie函数的注意事项
函数说明 bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $pat ...
- 网页效果分析 VCD分解
VCD分解分为三部分: 1. view 视觉 HTML + CSS 基本界面模板 2. controller 控制 javascript 内 ...
- 分析诊断工具之五:Procedure Analyse优化表结构
一.Procedure Analyse PROCEDURE ANALYSE() ,在优化表结构时可以辅助参考分析语句.通过分析select查询结果对现有的表的每一列给出优化的建议. 利用此语句,MyS ...
- LNMP 1.6 常见的502问题解决
在nginx上跑discuz,先修改配置文件 cd /usr/local/nginx/conf/vhosts/ vim test.conf server { listen ; server_name ...