• 面向对象第五天


    1:单例模式

             单个实例,一个实例。如何让一个类只能产生一个对象?构造方法私有化,提供静态公共方法放回这个类的对象。

             单例模式的两种形式:

    懒汉式:一开始对象是空的

                       饿汉式:一开始就创建了对象

     1 //设计模式:
     2 //单例模式:单个实例,一个实例。需求:如何让一个类只能产生一个对象
     3 /*
     4 模式:解决一个问题的一种方式。
     5 单例模式:
     6 1:懒汉式。
     7     1.1:构造方法私有化。
     8     1.2:声明一个静态的这个类型的成员变量。
     9     1.3:提供一个公共的方法返回这个类型的对象,在方法体里判断成员变量
    10         是否为null,如果null则创建对象,否则返回这个对象。
    11 2:饿汉式
    12     1.1:
    13 
    14 */
    15 /*懒汉式:面试用,这个程序会出现线程安全问题,有可能出现多个对象。
    16 需要进行修改。*/
    17 class SingleInstance
    18 {
    19     //定义一个变量来保存对象。
    20     private static SingleInstance single; 
    21     //构造方法私有化
    22     private SingleInstance(){
    23     }
    24     //提供一个公共的方法将这个类的对象返回出去
    25     public static SingleInstance newInstance(){
    26         //创建之前要判断。
    27         if(single==null)
    28          single = new SingleInstance();
    29         return single;
    30     }
    31 
    32 }
    33 //饿汉式:开发用
    34 class SingleInstance2
    35 {
    36     private static SingleInstance2 single = new SingleInstance2();
    37     private SingleInstance2(){
    38     }
    39     public static SingleInstance2  newInstance(){
    40         return single;
    41     }
    42 }
    43 class  TestSingleInstance
    44 {
    45     public static void main(String[] args) 
    46     {
    47         SingleInstance single1 =SingleInstance.newInstance();
    48         SingleInstance single2 =SingleInstance.newInstance();
    49         SingleInstance single3 =SingleInstance.newInstance();
    50         //判断对象指的是否为同一个对象。
    51         if(single1==single2&&single1==single3){
    52             System.out.println("单例");
    53         }else{
    54         System.out.println("非单例");
    55         }
    56     }
    57 }

    2:内部类

             2.1:成员内部类

                       2.1.1:将类定义在一个类的里面,成员方法的外面。

                       2.1.2:内部类可以访问外部类的所有成员,外部类如果需要访问内部类,需要创建内部类对象,再用对象去访问。

    外部类名.内部类名 变量名 =  外部类对象.内部类对象;

    Outer.Inner in = new Outer.new Inner();//这种形式很少用。

             2.2:匿名内部类

                       2.2.1:没有名字的内部类。

                       2.2.2:当一个内部类在需求中只创建一个对象的时候,这样的类就可以不用取名字,这样的类就叫匿名内部类。匿名内部类一般情况下都会重写父类的方法。

                       语法:

                                new   父类名(){

                                         重写父类的方法。

                                } 后面可以接上 .方法名();

                       2.2.3匿名内部类其实就是一个匿名子类对象。想要定义匿名内部类:需要前提,内部类必须继承一个类(不管是抽象类还是普通类)或者实现接口。

                       匿名对象:没有名字的对象,这样的对象由于没有名字,所以只能使用一次。

             2.3:静态内部类

                       2.3.1:当内部类中出现静态成员时,内部类必须声明为静态内部类。

                       2.3.2:静态内部类只能访问外部类的静态成员。

    Outer.Inner in = new Outer. Inner();

             2.4:局部内部类。

                       2.4.1:当将一个类定义在方法内时,这样的内部类局部内部类。

                       2.4.2:局部内部类只能在定义它的方法内使用。由于在方法内,所以这样的类是不能添加访问权限的。

             2.5:接口回调。(多态的一个体现,也类似于接口的实现)

                       

     1 //需求:写一个类,有一个方法专门是下载网络数据。
     2 //接口回调
     3 class Utils
     4 {
     5     //方法
     6     public static void loadImage(String path,CallBack callBack){
     7         System.out.println("下载了数据");
     8         String str = "我是下载的数据";
     9 /*下面应该对数据进行处理。设计阶段只知道会处理这些数据,
    10 但是怎样去处理这些数据,并不是很清楚.只能用户调用这个方法的时候
    11 才能确定。
    12 */
    13         callBack.getData(str);
    14     }
    15 }
    16 interface CallBack
    17 {
    18     //专门处理下载数据的行为
    19     public abstract  void getData(String str); 
    20 }
    21 class  TestCallBack
    22 {
    23     public static void main(String[] args) 
    24     {
    25         String path = "www.baidu.com/image/logo.png";
    26         Utils.loadImage(path,new CallBack(){
    27             public void getData(String str){
    28                 //将数据写到文件中
    29                 System.out.println("我将数据写到了文件中"+str);
    30             }
    31         });
    32 
    33     }
    34 }
  • 相关阅读:
    Expanding Rods(二分)
    Monthly Expense(二分)
    sdut1269 走迷宫(dfs)
    走迷宫(dfs)
    C Looooops(扩展欧几里得+模线性方程)
    41. First Missing Positive
    40. Combination Sum II
    39. Combination Sum
    37. Sudoku Solver
    36. Valid Sudoku
  • 原文地址:https://www.cnblogs.com/xinge1993/p/4678442.html
Copyright © 2020-2023  润新知