现在的位置: 首页 > 综合 > 正文

java设计模式_Composite模式

2018年06月08日 ⁄ 综合 ⁄ 共 2300字 ⁄ 字号 评论关闭

Composite模式(组合)
   Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循一定的编程模式,才能使自己的代码便于理解,易于交流,Composite(组合模式)模式是比较常用的一个模式.
   Composite组合模式,将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性
   优点: 1.使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关系自己处理的是单个对象还是整个组合结构,这就简化了客户端代码。
         2.更容易在组合体内加入对象部件. 客户端不必因为加入了新的对象部件而更改代码。

 

  在此写了6个java类来描述说明Composite设计模式的实现方式;

  1、 Circle.java      部件-圆
  2、 Graph.java       部件-抽象类
  3、 Line.java        部件-线
  4、 Picture.java     部件-图
  5、 Rectangle.java   部件-方
  6、 PictureTest.java 带有main方法的测试类

 

===============   1、 Circle.java
package composite;

//部件-圆
public class Circle extends Graph {
 public void draw() {
  System.out.println("Draw a circle.");
 }
}
===============   1 end

 

===============   2、 Graph.java
package composite;
import java.util.Iterator;

//部件-抽象类
public abstract class Graph{
 //画图
    public abstract void draw();

 //增加一个图形
 public void add(Graph g){};

 //删除一个图形组件
 public void remove(Graph g){};
 
 //获得组合体的内部部件
 public Iterator<Graph> iter(){return null;};
}
===============   2 end

 

===============   3、 Line.java
package composite;

//部件-线
public class Line extends Graph {
 public void draw() {
  System.out.println("Drwa a line.");
 }
}
===============   3 end

 

===============   4、 Picture.java
package composite;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

//部件-图
public class Picture extends Graph {
 //图形组建集合
 private List<Graph> graphs = new ArrayList<Graph>(10);

 //绘制图片
 public void draw() {
  for (Graph graph : graphs) {
   graph.draw();
  }
 }

 //增加一个图形
 public void add(Graph g) {
  graphs.add(g);
 }

 //删除一个图形组件
 public void remove(Graph g) {
  graphs.remove(g);
 }

 //获得图形组件
 public Iterator<Graph> iter() {
  return graphs.iterator();
 }
}
===============   4 end

 

===============   5、 Rectangle.java
package composite;

//部件-方
public class Rectangle extends Graph {
 public void draw() {
  System.out.println("Drwa a rectangle.");
 }
}
===============   5 end

 

===============   6、 PictureTest.java
package composite;

import java.util.Iterator;

//带有main方法的测试类
public class PictureTest {

 public static void main(String[] args) {
  
  //1 准备画图
  Graph picture = new Picture();
  //1.1 图片中需要有园
  picture.add(new Circle());
  //1.2 图片中需要有线
  picture.add(new Line());
  //1.3 图片中需要有方
  picture.add(new Rectangle());
  
  //2 画图
  picture.draw();
  
  //3 获得组合体内的部件
  System.out.println("");
  Iterator<Graph> iterator = picture.iter();
  while(iterator.hasNext()){
   iterator.next().draw();
  }
 }

}
===============   6 end

抱歉!评论已关闭.