java setcomposite_Java 实现组合(Composite)模式

类图

6f12ef33db6bb5200f0735d14c21a70f.png

/**

* 树总体

*

* @author stone

*

*/

public class Tree {

private TreeNode root; //根节点

public Tree(String name) {

this.root = new TreeNode(name);

}

public TreeNode getRoot() {

return root;

}

}/**

* 树节点 部份

* 也能够自身代表树:一堆节点组成了一颗树

*

* @author stone

*

*/

public class TreeNode {

private String name;

private TreeNode parent;

private List children;

public TreeNode(String name) {

this.name = name;

this.children = new ArrayList();

}

public void setName(String name) {

this.name = name;

}

public String getName() {

return name;

}

public void setParent(TreeNode parent) {

this.parent = parent;

}

public TreeNode getParent() {

return parent;

}

public List getChildren() {

return children;

}

public void add(TreeNode node) {

this.children.add(node);

}

public void remove(TreeNode node) {

this.children.remove(node);

}

}

/*

* 组合(Composite)模式 又叫做部分-总体模式

* 它使我们层级、树形结构的问题中,模糊了简单元素和复杂元素的概念,客户程序能够像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦

* 以下情况下适用Composite模式:

1.你想表示对象的部分-总体层次结构

2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的全部对象。

*/

public class Test {

public static void main(String[] args) {

//Tree treeA = new Tree("A");

//treeA.getRoot().add(new TreeNode("B"));

//treeA.getRoot().add(new TreeNode("C"));

//TreeNode treeNodeD = new TreeNode("D");

//treeNodeD.add(new TreeNode("D1"));

//treeNodeD.add(new TreeNode("D2"));

//treeA.getRoot().add(treeNodeD);

//print(treeA.getRoot());

/*

* 上面使用了Tree对象,

* 以下仅仅使用TreeNode对象,符合组合模式的定义,既代表部分也代表总体

*/

TreeNode treeA = new TreeNode("A");

treeA.add(new TreeNode("B"));

treeA.add(new TreeNode("C"));

TreeNode treeNodeD = new TreeNode("D");

treeNodeD.add(new TreeNode("D1"));

treeNodeD.add(new TreeNode("D2"));

treeA.add(treeNodeD);

print(treeA);

/*

* 其它演示样例:文件系统{文件夹、文件}, 相似这样的可用递归遍历的结构,

* 用一个对象就能表示部分与总体,都能够用组合模式

*/

}

public static void print(TreeNode root) {

if (root == null) return;

LinkedList linkedList = new LinkedList();

linkedList.add(root);

while (!linkedList.isEmpty()) {

TreeNode node = linkedList.removeFirst();

System.out.println(node.getName());

List children = node.getChildren();

for (int i = 0; i < children.size(); i++) {

TreeNode next = children.get(i);

List children2 = next.getChildren();

if (!children2.isEmpty()) {

linkedList.add(next);

} else {

System.out.println(next.getName());

}

}

}

}

}

打印

A

B

C

D

D1

D2

Java实现图片透明效果,从演示截图可看到,上层图片与下层图片互相重叠,也就是上层图片透明了,看到了下层以的图片,具体的代码实现:   public class HalfTransparentImageDemo extends JFrame {    private Container content = getContentPane(); //获得窗口的容器    private JSlider jSlider = new JSlider(JSlider.HORIZONTAL,0,100,75); //改变图像的透明度    DisplayPanel displayPanel = new DisplayPanel(); //显示图形面板    public HalfTransparentImageDemo() {    super("半透明图片"); //调用父类构造器    jSlider.setPaintTicks(true); //绘制标志位    jSlider.setMajorTickSpacing(25); //设置标志尺寸    jSlider.setMinorTickSpacing(5);    jSlider.setPaintLabels(true); //绘制出数字    jSlider.setBorder(new TitledBorder(BorderFactory.createEmptyBorder(), "图像的透明度(%)")); //设置边框    jSlider.addChangeListener(new ChangeListener() { //滑动条jSlider事件处理    public void stateChanged(ChangeEvent ce) {    float alpha =((float) ((JSlider) ce.getSource()).getValue()) / 100;    displayPanel.alpha = alpha; //改变图像的透明度    displayPanel.repaint(); //重绘displayPanel    }    g2d.drawImage(bufImage1, 0, 0, this); //在图形环境绘制缓冲区图像1    g2d.drawString("Destination",5,20); //绘制文字    int compositeRule = AlphaComposite.SRC_OVER; //源排斥目标法合成规则    AlphaComposite alphaComposite=AlphaComposite.getInstance(compositeRule,alpha); //创建AlphaComposite对象    g2d.setComposite(alphaComposite); //设置图形环境的合成方式    g2d.drawImage(bufImage2, 0, 0, this); //在图形环境绘制缓冲区图像2    g2d.drawString("Source",150,20); //绘制文字    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值