Day3-3.30

(1)单件模式

设计模式中一种,它确保一个类有且只有一个对象。

解决方法:将类的构造方法封装起来,这样在类的外部无法实例化这个对象;在类的内部用静态属性方式定义该类的一个声明;提供一个静态方法完成单件逻辑,即当静态类声明没有引用对象实例化类对象,而在引用一个类对象时,返回该对象的引用。

优点:保证一个类有且仅有一个实例;提供某个对象的全局访问点。

缺点:只考虑对象的创建管理,没有考虑销毁的管理,也不支持对象序列化。

 

代码:(加粗为关键代码)

package com.resource;//单件模式

public class FitghterPlane {
       private String name;
       private int missileNum;
       private static FighterPlane fp;
       private FighterPlane(String _name,int _missileNum){
       name=_name;
       missileNum=_missileNum;
       }
       public static FighterPlane getInstance(Dtring _name,int _missileNum){
             if(fp=null){
             fp=new FighterPlane(_name,_missileNum);
             }
       return fp;
    }

      public void fire(){
             if(missileNum>0){
             System.out.println("now fire a missile!");
             missileNum-=1;
             }
             else{
                   System.out.println("no missile left!");
            }
         }
      }

package com.run;
import com.resource.*;
       public class RunPlane {
       public static void main(String args[]){
             FighterPlane fp;
             fp=FighterPlane.getInstance("苏35",6);
             fp.fire();
             }
        }

 

 

(2)消息

在面向对象的语言中,程序=对象+消息

当fp作为A对象的属性时,且具备了发送消息的条件后,A对象就有了对FighterPlane对象的访问权限A对象就可以像FighterPlane对象发送消息------控制FighterPlane对象产生相应的操作。即FighterPlane对象能被A所访问。同理,当FighterPlane中也有A对象的引用时,它也可以向A对象发送消息,控制A对象产生相应的操作。它们之间就存在双向关联关系。
代码举例:

package message;

public class FighterPlane {

           String name;
           int missileNum;
           public FighterPlane(String _name,int _missileNum){
                   name=_name;
                   missileNum=_missileNum;
                   }
           public void fire(){
                    if(missileNum>0){
                         System.out.println("now fire a missile!");
                         missileNum-=1;
                    }
                    else{
            System.out.println("No missile left!");
                    }
              }
 }

package message;

public class A {
         FighterPlane fp;
         public A(FighterPlane fpp){
                   this.fp=fpp;//A对象中拥有了FighterPlane对象的引用
         }
        public void invoke(){
        //A对象发送消息给FighterPlane的对象
        System.out.println(fp.name);
     }
}

package message;

public class run {

          public static void main(String[] args){
                     FighterPlane ftp=new FighterPlane("su35",10);
                     //产生A对象,并将ftp作为对象引用传入
                     A a=new A(ftp);
                     //发送消息,产生调用关系
                     a.invoke();

      }

}

 


 

 

(3)封装与访问权限,继承

   较简单,略

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值