1.概念
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 [构建与表示分离,同构建不同表示]
与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。即建造模式可以强制实行一种分步骤进行的建造过程。
建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。
举个简单的例子,如汽车,有很多部件,车轮,方向盘,发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一部汽车,这个装配过程也很复杂(需要很好的组装技术), builder模式就是为了将部件和组装分开。
2.UML图
3.下面看下我的一个小例子
(1)先来写2个接口一个用于鸭子的飞行,一个用于鸣叫
package org.lxh.dao;
//鸭子的飞行(并不是所有的鸭子都会飞行)
public interface FlyBehavior {
public void fly();
}
package org.lxh.dao;
//鸭子的发声(并不是所有的鸭子都会叫)
public interface QuackBehavior {
public void quack();
}
(2)接口的实现类
package org.lxh.impl;
import org.lxh.dao.FlyBehavior;
public class FlyNoWay implements FlyBehavior{
public void fly() {
System.out.println("我不会飞行");
}
}
package org.lxh.impl;
import org.lxh.dao.FlyBehavior;
public class FlyWithWings implements FlyBehavior{
public void fly() {
System.out.println("我使用翅膀飞行");
}
}
package org.lxh.impl;
import org.lxh.dao.QuackBehavior;
public class Squack implements QuackBehavior{
public void quack() {
System.out.println("咯咯咯咯");
}
}
package org.lxh.impl;
import org.lxh.dao.QuackBehavior;
public class Quack implements QuackBehavior{
public void quack() {
System.out.println("呱呱呱呱");
}
}
(3)下面便是最重要的
建造工具了,这里使用的是抽象类,不适用抽象类也是可以的
package org.lxh.builder;
import org.lxh.dao.FlyBehavior;
import org.lxh.dao.QuackBehavior;
public abstract class Duck {
//先声明2个接口分别是飞行和鸣叫
FlyBehavior flyBeBehavior;
QuackBehavior quackBeBehavior;
public Duck(){
}
//鸭子具体的飞行和鸣叫
public void showFly(){
flyBeBehavior.fly();
}
public void showQuack(){
quackBeBehavior.quack();
}
}
(4)指导者或建造者具体的事物这里就是我们要用到的黑鸭子和蓝鸭子
package org.lxh.builder;
import org.lxh.dao.FlyBehavior;
import org.lxh.impl.FlyWithWings;
import org.lxh.impl.Quack;
public class BlackDuck extends Duck{
public BlackDuck() {
//黑色鸭子使用翅膀飞行
flyBeBehavior=new FlyWithWings();
//黑色鸭子呱呱叫
quackBeBehavior=new Quack();
}
}
package org.lxh.builder;
import org.lxh.impl.FlyNoWay;
import org.lxh.impl.FlyWithWings;
import org.lxh.impl.Quack;
import org.lxh.impl.Squack;
public class BlueDuck extends Duck{
public BlueDuck()
{
//黑色鸭子使用翅膀飞行
flyBeBehavior=new FlyNoWay();
//黑色鸭子呱呱叫
quackBeBehavior=new Squack();
}
}
(5)到这里代码就写完了,下面就是我的单元测试了
package org.lxh.test;
import org.lxh.builder.BlackDuck;
import org.lxh.builder.BlueDuck;
import org.lxh.builder.Duck;
public class TestBuilder {
@org.junit.Test
public void TestBlack(){
System.out.println("我是黑鸭子============");
Duck duck=new BlackDuck();
duck.showFly();
duck.showQuack();
}
@org.junit.Test
public void TestBlue(){
System.out.println("我是蓝鸭子=============");
Duck duck=new BlueDuck();
duck.showFly();
duck.showQuack();
}
}
下面是运行效果图,代码大家到我的资源里找就OK了。
分享到:
相关推荐
c++实现建造者模式,可直接运行
设计模式之建造者模式代码示例,
这个http://blog.csdn.net/dawanganban/article/details/9990405博客中java设计模式的源代码。下载前请先看《设计模式——建造者模式》一文。
建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表现。这就是建造者模式。 建造者模式可以把一个产品的内部表象与产品的生成过程分隔开来,从而可以使一个建造过程就可以生成...
java设计模式【之】建造者模式【源码】【场景:车辆组装】 将复杂的对象构建,与对象的使用进行分离 用户只需要通过简单流程即可创建出对象 方法调用顺序,步骤的不同实现 优点:封装性号,创建和使用分离,扩展性...
设计模式之建造者模式,这个实例能让你尽快理解和掌握建造者模式的运用和原理
C#设计模式之建造者模式应用实例
java 设计模式 建造者模式,希望对大家理解设计模式有帮助
java 建造者模式代码
设计模式例子,观察者模式,建造者模式,一些实践的例子,通俗易懂.
Java 常见创建型模式中的建造者模式及其实际开发中的变种模式
java 建造者模式 源码 ,一个小例子
ios 进阶 建造者模式 学习的好资料 设计模式快速学习
设计模式-建造者模式(讲解及其实现代码)
qt5 编写的建造者模式程序,适用于使用c++学习设计模式的同学
设计模式C++学习之建造者模式(Builder)
建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式 由四部分组成: 1.Director(指挥者): 如果创建对象的流程所在 2.Builder(抽象接口): 创建对象要实现的细节,流程依赖着细节 3.ConcreteBuilder(具体构建对象): 创建对象的具体细节实现 4.Product(具体...
13建造者模式.zip