`

[原]合成模式-安全的

阅读更多

[关键字]:java,design pattern,设计模式,《Java与模式》学习,composite,合成模式
[环境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com) http://www.blogjava.net/wintys/
[正文]:
安全的合成模式


package pattern.composite.safe;

import java.util.*;
/**
 * 安全的合成模式:Composite Pattern
 * @version 2009-6-3
 * @author Winty(wintys@gmail.com)
 */
public class SafeCompositeTest{
    public static void main(String[] args){
        Graphics g1 , g2;
        Picture p1 , p2;

        g1 = new Line();
        g2 = new Circle();
        p1 = new Picture();
        p2 = new Picture();

        g1.draw();
        g2.draw();
        System.out.println("");

        p1.add(g1);
        p1.add(g2);
        p1.draw();
        System.out.println("");

        p2.add(g1);
        p2.add(g2);
        p2.add(p1);
        p2.draw();
    }
}

/**
 * 抽象Component角色
 */
interface Graphics{
    void draw();
}

/**
 * Leaf角色
 */
class Line implements Graphics{
    @Override
    public void draw(){
        System.out.println("draw a line.");
    }
}

/**
  * Leaf角色
  */
class Circle implements Graphics{
    @Override
    public void draw(){
        System.out.println("draw a circle");
    }
}


/**
 * Composite角色
 */
class Picture implements Graphics{
    private List<Graphics> graphics;

    public Picture(){
        graphics = new ArrayList<Graphics>();
    }

    @Override
    public void draw(){
        Iterator<Graphics> it = graphics.iterator();
        while(it.hasNext()){
            Graphics g = it.next();
            g.draw();
        }
    }

    public void add(Graphics g){
        graphics.add(g);
    }

    public void remove(int i){
        graphics.remove(i);
    }

    public Graphics getChild(int i){
        return graphics.get(i);
    }
}

运行结果:


draw a line.
draw a circle

draw a line.
draw a circle

draw a line.
draw a circle
draw a line.
draw a circle
  • 大小: 33.1 KB
分享到:
评论

相关推荐

    applem2_20120610苹果引擎配套工具,内有登陆器配置

    原顺序为:物品名称 摆放位置 刷新时间(分钟) 数量 目前为:物品名称 数量 刷新时间(分钟) 摆放位置 [2012-05-01] 1、MonGen.txt配置增加了一个参数,为1时表示刷新出来的怪会有无敌模式(即打不死) MonGen配置说明...

    新版Android开发教程.rar

    � 良好的盈利模式( 3/7 开),产业链条的各方:运营商、制造商、独立软件生产商都可以获得不错的利 益 。 将移动终端的评价标准从硬件向软件转变,极大的激发了软件开发者的热情。 � Android 的源代码遵循 Apache...

    【清华】 软件工程(完) 视频.txt

    《软件工程(原书第9版)》包含四个部分:第一部分是对软件工程的一般性介绍,包括软件工程过程和敏捷开发,以及面向对象的设计和设计模式的使用;第二部分介绍可依赖性和信息安全性问题;第三部分介绍高级软件工程;...

    2009达内SQL学习笔记

    可以利用通配符创建比较特定数据的搜索模式,通配符只能用于文本,非文本数据类型不能使用通配符。 通配符在搜索模式中任意位置使用,并且可以使用多个通配符。 通配符%表示任何字符出现任意次数;还能代表搜索...

    基于Realtek RTL8763B的蓝牙车充播放器-电路方案

    随着汽车工业的迅猛发展,车载无线耳机充电器...集成低相位噪声数字合成器和广泛的片上自动校准确保了稳健的一致性性能超过温度 和工艺变化。集成的电压调节器能够直接连接到电池,并提供高PSRR,用于优良的噪声抑制。

    JAVA上百实例源码以及开源项目源代码

     用JAVA编写了一个小工具,用于检测当前显示器也就是显卡的显示模式,比如分辨率,色彩以及刷新频率等。 Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字  Java波浪文字,一个利用...

    JAVA上百实例源码以及开源项目

     用JAVA编写了一个小工具,用于检测当前显示器也就是显卡的显示模式,比如分辨率,色彩以及刷新频率等。 Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字  Java波浪文字,一个利用...

    《浩海网络多格式播放器》V3.9.4.1

    来尽最大可能保护您的歌曲地址的不外泄 6,可读取本地、局域网和网络三部分歌曲合成一张列表播放 7,URL输入窗口增加面向使用用户的制定选择播放控件的功能 8,列表播放拥有三循环状态 9,生成的播放列表还可以进行后续...

    《浩海网络多格式播放器》V3.9.4.4

    来尽最大可能保护您的歌曲地址的不外泄 6,可读取本地、局域网和网络三部分歌曲合成一张列表播放 7,URL输入窗口增加面向使用用户的制定选择播放控件的功能 8,列表播放拥有三循环状态 9,生成的播放列表还可以进行后续...

    《浩海网络多格式播放器》V3.9.4.5

    来尽最大可能保护您的歌曲地址的不外泄 6,可读取本地、局域网和网络三部分歌曲合成一张列表播放 7,URL输入窗口增加面向使用用户的制定选择播放控件的功能 8,列表播放拥有三循环状态 9,生成的播放列表还可以进行后续...

Global site tag (gtag.js) - Google Analytics