zoukankan      html  css  js  c++  java
  • Java基础部分--面向对象高级特性(2)

    一.开发模式

      单例模式  工厂模式  MVC架构  dao开发模型  代理模式  观察者模式

    1.单例模式

    – 一个只有一个对象,并且自动向整个系统提供这个对象

    – 生产,获取唯一一个对象的方法

    单例模式实现:

    – 拥有一个私有构造器
    – 提供一个自身静态私有的成员变量
    – 提供一个公有的静态公有的方法

    final关键字
      final可以修饰的元素:
          类:不能被继承
          变量(属性和局部变量):不能被重新赋值 在声明时赋值,或在构造器中赋值,系统不会对final属性默认的赋初始值
          方法:不能在子类中被覆盖,即不能修改

    2.工厂模式

    –批量生产有共同特点的一类对象 

     简单工厂(静态工厂)  : 静态工厂的生产方法生产出了具有接口共性特点不同产品

    3.抽象类    extends    

    –抽象方法和具体方法的集合 

    –抽象方法abstract修饰,没有方法体的方法,没有具体实现方法的代码,只有方法声明,没有方法实现的方法

          单继承

    抽象类的规则

      注意:
     抽象类不能被实例化;
     其包含的抽象方法必须在其子类中被实现,否则该子类只能声明为abstract;
     抽象方法不能为static;
     在下列情况下,一个类必须声明为抽象类:
     当一个类的一个或多个方法是抽象方法时;
     当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部分;
     当一个类实现一个接口,并且不能为全部抽象方法都提供实现时;

    4.接口  implements  

     接口中只包含常量和抽象方法,而没有变量和方法的实现
     接口对类来说是一套规范,是一套行为协议
     接口不是一个类,不能实例化

    接口是常量和抽象方法的集合

      可以多重实现

     注意:

     接口不是一个类,没有构造器,不能被实例化
     接口使用interface关键字来定义,而不是class
      接口默认:
     常量:public static final
     抽象方法: public abstract

    5.内部类 

      里面的类可以直接使用外部类的属性和方法

        外部类使用里面的类的属性方法时,需要实例化里面的类

    单例模式

     1 package singleton; 2 
     3 public class A { 4 
     5    }
     6 
     1 package singleton;
     2 
     3 public class Sin {    //  单例类
     4     
     5     /*特点:
     6     某个类只能有一个实例
     7     它必须自行创建这个示例
     8     必须自行向整个系统提供这个实例*/
     9     
    10         int  x=10;
    11     
    12     private   static  final  Sin   s1=new Sin();
    13     
    14     
    15     private   Sin(){}
    16 
    17        //必须自行向整个系统提供这个实例
    18     public   static   Sin     getSin(){
    19         
    20         return  s1;
    21     } 
    22     
    23     public   void   abc(){}
    24 
    25     
    26 
    27 }
     1 package singleton;
     2 
     3 public class Main9 {
     4 
     5     /**
     6      * @param args
     7      */
     8     public static void main(String[] args) {
     9           int  x=10;
    10         
    11           Sin   s1=Sin.getSin();
    12           System.out.println(s1.x);  
    13           
    14           
    15           
    16             
    17           Sin   s2=Sin.getSin();
    18           System.out.println(s2.x);  
    19           
    20           System.out.println(s1==s2);  
    21           
    22             A  a1=new A();
    23             A  a2=new A();
    24             System.out.println(a1==a2);  
    25           
    26           
    27     }
    28 
    29 }

    工厂模式

     接口

     1 package factory;
     2 
     3 public interface Toy {   //玩具接口---常量接口
     4     
     5     //常量
     6     String  name="玩具";
     7     double   price=10.0;
     8     //抽象方法
     9     public   void   show();     //单方法接口---最容易扩展需求
    10 
    11 }

    接口的实现类

     1 package factory;
     2 
     3 public class Car implements Toy {   //玩具汽车
     4 
     5     @Override    //重写接口的方法
     6     public void show() {
     7         System.out.println(Toy.name);    //直接使用接口名称调用常量
     8     }  
     9     
    10     //玩具车新增的方法
    11     public   void  run(String  battcell){   //接收参数电池
    12         System.out.println("玩具车需要有"+battcell+"才能向前跑");        
    13     }
    14     
    15 
    16 }
     1 package factory;
     2 
     3 public class Dull implements Toy {    //玩偶
     4 
     5     @Override
     6     public void show() {        
     7         System.out.println(Toy.price); 
     8     }
     9 
    10 }
     1 package factory;
     2 
     3 public class Brick implements Toy {   //积木
     4 
     5     @Override
     6     public void show() {
     7         
     8     }
     9 
    10 }

    工厂类

     1 package factory;
     2 /*
     3  * 
     4  *     ==      判定相等   ----  判定内存地址是否一致   (看是不是一个东西)
     5  *     equals  判定相等  ----  判定值是否一致                 (看是不是长的像)
     6  * 
     7  * 
     8  */
     9 public class ToyFactory { // 工厂----生产玩具产品
    10 
    11     // 生产---返回值为接口类型
    12     public   static  Toy getToy(String material) { // 参数为原材料
    13 
    14         if ( "金属".equals(material)|| material=="金属" ) {  
    15             return new Car(); // 匿名对象
    16         } else if ("塑料".equals(material) || material=="塑料" ) {
    17             return new Dull();
    18         } else if ("木材".equals(material)||material=="木材") {
    19             return new Brick();
    20         } else {
    21             System.out.println("您的材料有误");
    22             return null;
    23         }
    24 
    25     }
    26 
    27 }

    主方法

     1 package factory;
     2 
     3 public class Main12 {
     4 
     5     /**
     6      * 向上转型:    父类  ----  子类构造方法                      接口  -----   实现类构造方法
     7      * 
     8      * 向下转型:   子类----- (子类)父类构造方法                   实现类    ------(实现类)返回接口类型
     9      * 
    10      */
    11     public static void main(String[] args) {
    12          // ToyFactory  toyFactory=new ToyFactory();
    13          // System.out.println(toyFactory.getToy("塑料"));  //直接输出对象,得到了对象的字符串表示
    14           //Dull   d1=(Dull)toyFactory.getToy("塑料");
    15          // d1.show();
    16         
    17         ((Dull)ToyFactory.getToy("塑料")).show();   //向下转型
    18         ((Car)ToyFactory.getToy("金属")).show();
    19         
    20     }
    21 
    22 }

    抽象类

     1 package abstract1;
     2 
     3 public abstract class Abs {   //抽象类
     4     
     5       // 抽象
     6     int  x;
     7     
     8     //抽象方法---没有具体实现方法的代码
     9     public abstract  void  show();
    10     
    11     
    12     //具体方法(不推荐)
    13     public  void  test(){
    14         System.out.println("Abs.test()");
    15     }
    16 
    17 }
     1 package abstract1;
     2 
     3 public class AbsImp extends Abs {   //完成具体功能
     4 
     5     @Override //标注类型:  重写
     6     public void show() {
     7         
     8          System.out.println(1234567);
     9          
    10     }
    11 
    12 }

    接口

     1 package interface1;
     2 
     3 public interface Animal {   //动物接口
     4     
     5     //常量
     6       boolean   sleep=true;
     7       
     8       
     9       //抽象方法
    10       public   void    eat(String  x);
    11 
    12 }
     1 package interface1;
     2 
     3 public class Horse implements Vehicle, Animal { //
     4 
     5     @Override
     6     public void transport(String x) {
     7         
     8     }
     9 
    10     @Override
    11     public void eat(String x) {
    12     
    13     }  
    14 
    15 }

     

    内部类

     1 package test;
     2 
     3 public class Outer {     //
     4     int x=1;
     5     public void show(){
     6         System.out.println("Outer.show()");
     7         Inter inter =new Inter();
     8         inter.test();
     9     }
    10     
    11     public  class  Inter{ //内部类
    12         public  void  test(){
    13             System.out.println(x);
    14         }    
    15     }
    16 }
  • 相关阅读:
    一套代码小程序&Web&Native运行的探索05——snabbdom
    一套代码小程序&Web&Native运行的探索04——数据更新
    一套代码小程序&Web&Native运行的探索03——处理模板及属性
    一套代码小程序&Web&Native运行的探索02
    微信小程序开发07-列表页面怎么做
    微信小程序开发06-一个业务页面的完成
    微信小程序开发05-日历组件的实现
    微信小程序开发04-打造自己的UI库
    微信小程序开发03-这是一个组件
    30分钟ES6从陌生到熟悉
  • 原文地址:https://www.cnblogs.com/Pioneer-HengYu/p/6680775.html
Copyright © 2011-2022 走看看