有三个类:A、B、C,A和B都可以生成C的对象,
A在生成C的对象时要判断当前B有没有生成C的对象,如果B已经生成C的对象,那么A就不用再生成C的对象,直接调用C的对象即可。
同样,B在生成C的对象时也要判断当前A有没有生成C的对象。
类似的,这个问题可以扩展到多个类在生成同一个类对象时的处理,应该怎么处理呢?我有点乱,请高手指点一下!可能只需要你的一点点提示,就可以解决这个问题,非常期待......Class A {
  
  private C cc;  public void createC() {
    处理......
  }  public C getC() { 
    return cc;
  }
}Class B {
  
  private C cc;  public void createC() {
    处理......
  }  public C getC() { 
    return cc;
  }
}Class C {  public C() {
  }
}

解决方案 »

  1.   

    For_suzhen(不懂装懂):什么意思?我没有做测试代码,目前还没有明确的思路,希望大家给与指点呀!参与有分呀!
      

  2.   

    A,B下的C都设定为static,初始值为null,
    A,B生成C之前判断对方的C是否为null
    不知道这样行不。
      

  3.   

    把C用单例模式设计
    class C{
      private C c;
      private C(){}
      public static C newInstance(){c = (c==null? new C() : c); return c;}
    }class A{
    ...
        public void createC() {
        cc = C.newInstance();
      }
    }
      

  4.   

    huhuGang():多谢你的提议,使用静态变量肯定没问题,这个我也考虑过,但是我认为使用静态变量不好,想寻求不使用静态变量的方法,高手能否指点一下?难道只有使用静态变量才能实现吗?
      

  5.   

    class C{
      private static final C c = null;
      private C(){}
      public static C newInstance(){if (c==null) c=new C(); 
      return c;}
    }
      

  6.   

    单态模式真是太爽了!控制起来非常方便,希望大家都能使用!多谢believefym(暮色,miss,迷失,miss)
      

  7.   

    这样解决了吗?
    class B和class A的实现和class C一样的吗?
      

  8.   

    class C{
      private static final C c = null;
      private C(){}
      public static C newInstance(){if (c==null) c=new C(); 
      return c;}
    }
    //////////////////////////
    上面的代码要报错啊?
      

  9.   

    class C {
    private static final C c = new C(); private C() {
    } public static C newInstance() {
    return c;
    }
    }
      

  10.   

    现在虽然对C类实现了单例模式,加上A类和B类也用同样的实现方式.但是这是三个各自独立的类,怎么保证只产生一个C类的实例呢?
    如果分别对A,B,C类都调用一个newInstance方法,那么不就产生了三个C类的实例了吗?
      

  11.   

    我的方法是通过另一个容器来存放C类的实例.代码如下:
    import java.util.Map;
    import java.util.HashMap;
    import java.util.Iterator;class ContextObj{
    private Map container=new HashMap();

    public ContextObj(){}

    public void add(Object obj){
    this.container.clear();
    if (obj instanceof ObjC){
    this.container.put(String.valueOf(obj.hashCode()),obj);
    }
    }

    public Map getContainer(){
    return this.container;
    }
    }class ObjA extends SuperObj{
    private ObjA(){}

    public static ObjC newInstance(){
    ObjC c=ObjC.newInstance(); 
    return c;
    }
    }class ObjB extends SuperObj{
    private ObjB(){}

    public static ObjC newInstance(){
    ObjC c=ObjC.newInstance(); 
    return c;
    }
    }class ObjC extends SuperObj{
    private ObjC(){}

    public static ObjC newInstance(){
    ObjC c=new ObjC();
    return c;
    }
    }
    public class SingleObject{
    public static void main(String[] args){
    ContextObj context=new ContextObj();

    ObjC ObjA_c=ObjA.create();
    context.add(ObjA_c);

    ObjC ObjB_c=ObjB.create();
    context.add(ObjB_c);

    ObjC ObjC_c=ObjC.create();
    context.add(ObjC_c); for (int i=0;i<context.getContainer().size();i++){
    System.out.println(context.getContainer().size());
    }

    Iterator itr_values=context.getContainer().values().iterator();
    while (itr_values.hasNext()){
    System.out.println(((Object)itr_values.next()).toString());
    }
    }
    }
      

  12.   

    ContextObj类中的那个Map也可以是一个ObjC
    象这样的话,就是不用单例,不用静态的newInstance方法也可以完成功能...
      

  13.   

    Student02370236(★★★★★★):
      现在虽然对C类实现了单例模式,加上A类和B类也用同样的实现方式.但是这是三个各自独立的类,怎么保证只产生一个C类的实例呢?
    -----------------------------------
      因为C的实例只能由C自己通过new生成,A、B只是通过C提供的访问唯一实例的方法newInstance来获取该实例,而不是每次newInstance都产生一个,所以始终只有一个C的实例,这就是单例设计模式,呵呵!  
     
      

  14.   

    Student02370236(★★★★★★):  很显然,你提供的通过另一个容器来存放C类的实例的方法比较麻烦,没有单例模式简单易行,不过还是非常感谢!  非常感谢大家的积极参与!
      

  15.   

    class ObjA {
    //private static ObjC _objc;

    private ObjA(){}

    public static ObjC newInstance(){
    ObjC c=ObjC.newInstance(); 
    return c;
    }
    }class ObjB {
    //private static ObjC _objc;

    private ObjB(){}

    public static ObjC newInstance(){
    ObjC c=ObjC.newInstance(); 
    return c;
    }
    }class ObjC {
    private static ObjC _objc;

    private ObjC(){}

    public static ObjC newInstance(){
    if (_objc==null)
    _objc=new ObjC();
    return _objc;
    }
    }
    的确象这样写就可以达到效果.只要不在A类和B类中再声明ObjC这个类的实例就行了 ...
      

  16.   

    代码很简单,看一下,给点建议!class A {
      
      public A() {
      }
      
      public void useC() {
        C cc = C.getInstance();
      }
    }class B {  public B() {
      }  public void useC() {
        C cc = C.getInstance();
      }
    }class C {
      
      private static C cc = null;
      
      private C() {
      }
      
      public static synchronized C getInstance() {
        if (cc == null) {
          cc = new C();
        }
        return cc;
      }
    }