
Public class Boss{
Private static Boss instance; //(2 分)
Private Boss(){ }//(2 分)
Public static Boss getInstance(){ // ( 2 分)
If(instance == null){
Synchronized(Boss.Class){ // ( synchronized 关键字, 2 分)
If(instance == null)
Instance = new Boss();
}
}
return instance;
}
}
或者
Public class Boss{
Private static Boss instance = new Boss();//(4 分)
Private Boss(){}// ( 2 分)
Public static Boss getInstance(){//2 分
Return instance;
}
}
一个农场公司,专门负责培育各种水果,有葡萄,草莓和苹果,请使用工厂方法,编写工厂类和主程序,并在主程序中来完成草莓生长状态的描述。( 8 分)

Public interface Factory{
Fruit build();
}
Public class AppleFactory implements Factory{
Public Fruit build(){
Return new Apple();
}
}
Public class GrapeFactory implements Factory{
Public Fruit build(){
Return new Grape();
}
}
Public class StrawberryFactory implements Factory{
Public Fruit build(){
Return new Strawberry();
}
}
Public class MainUI{
Public static void main(string[] str){
Factory fac = new StrawberryFactory();
Fruit ft = fac.build();
ft.plant();
Ft.grow();
Ft.harvest();
}
}
给定如图所示的树形结构,请应用组合模式,在客户端完成数据的展示。具体要求如下:
绘制组合模式的类图。( 4 分)
编写简单元素和复杂元素的代码。( 4 分)

在客户端构造出树形数据并输出。( 4 分)
提示:程序运行后,输出信息应为
Root
Leaf A
Comp B
Leaf BX
Leaf BY
Leaf C

class Leaf implements Component{
String name;
public Leaf(String name){this.name = name; }
public void display(){
System.out.println( name);
}
public void add(Component c){}
public void remove(Component c){}
}
class Composite implements Component{
String name;
ArrayList<Component> list = new ArrayList<Component>();
public Composite(String name){
this.name = name;
}
public void display(){
System.out.println(name);
for(int i = 0 ; i < list.size() ;i ++)
{
list.get(i).display();
}
}
public void add(Component c){list.add(c); }
public void remove(Component c){list.remove(c);}
}
客户端( 4 分):
public class Test {
public static void main(String[] args){
Component root = new Composite("Root");
root.add(new Leaf("Leaf A"));
Component comp = new Composite("Comp B");
root.add(comp);
comp.add(new Leaf("Leaf BX"));
comp.add(new Leaf("Leaf BY"));
root.add(new Leaf("Leaf C"));
root.display();
}
}
迭代器模式: 提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标 (Cursor) 。

CustomerManager 类
public class CustomerManager {
private ArrayList<String> list = new ArrayList<String>();
public void add(String str) {
list .add(str); }
protected ArrayList<String> getList() {
return list ; }
public Itertator getASItertator() {
return new AscIterator( this ); }
public Itertator getCharItertator(String s) {
return new CharIterator( this , s); }}
Itertator 类
public abstract class Itertator
{ public abstract boolean hasNext();
public abstract String next();}
AscIterator 类
public class AscIterator extends Itertator {
ArrayList<String> list = new ArrayList<String>();
Iterator iter ;
public AscIterator(CustomerManager cm) {
ArrayList<String> ls = cm.getList();
for (String s : ls) {
list .add(s);
Collections. sort ( list );
iter = list .iterator(); } }
public boolean hasNext() {
return iter .hasNext(); }
public String next() {
return (String) iter .next(); }}
CharIterator 类
public class CharIterator extends Itertator {
ArrayList<String> list = new ArrayList<String>();
Iterator iter ;
public CharIterator(CustomerManager cm, String str) {
ArrayList<String> ls = cm.getList();
for (String s : ls) {
if (s.startsWith(str)) {
list .add(s); }
iter = list .iterator(); } }
public boolean hasNext() {
return iter .hasNext();}
public String next() {
return (String) iter .next(); }}
主类
public class Client {
public static void main(String[] args) {
CustomerManager cm= new CustomerManager();
cm.add( "zhangsan" );
cm.add( "lisi" );
cm.add( "brown" );
cm.add( "alien" );
Itertator iter;
iter=cm.getCharItertator( "a" );
while (iter.hasNext()){
String str=iter.next();
System. out .println(str); } }}