单例设计模式&枚举&网络编程
设计模式:
是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结
: 套路 模式
前人已经经过大量测试得出的设计模式
使用设计模式的好处:提高代码的可重用性与可靠性。
单例设计模式 :
单个实例 == 》单个对象 意味着只能创建一个对象,就好电脑的任务管理器,只能有一个窗口。
单例设计模式:
① 私有构造方法
② 对外提供一个对象,供其他的类访问,但是该对象需要封装,通过 private 私有,提供 getter 方法。
③ 必须通过 static 进行类名调用。
单例设计模式的常用形式:
① 饿汉式
② 懒汉式
注意 : 懒汉式在理论上是优于饿汉式的,但是在开发中,往往使用的是饿汉式,尽管饿汉式的资源消耗大,但是
懒汉式有线程安全问题,比较来说,饿汉式使用效果优
饿汉式单例设计模式:
代码示例:
1 package DemoList; 2 3 public class Demo10 { 4 public static void main(String[] args) { 5 HungryMan instance=HungryMan.getInstance(); 6 HungryMan instance2=HungryMan.getInstance(); 7 System.out.println(instance==instance2); 8 } 9 } 10 class HungryMan{ 11 private HungryMan() { 12 } 13 private static HungryMan instance=new HungryMan(); 14 public static HungryMan getInstance() { 15 return instance; 16 } 17 }
执行结果:
懒汉式单例设计模式:
代码示例:
1 package DemoList; 2 3 public class Demo11 { 4 public static void main(String[] args) { 5 FoolMan instance=FoolMan.getInstance(); 6 FoolMan instance2=FoolMan.getInstance(); 7 System.out.println(instance==instance2); 8 } 9 } 10 class FoolMan{ 11 private FoolMan() { 12 13 } 14 private static FoolMan instance=null; //注意这里,只有当确定调用getInstance()方法时才会去创建对象。 15 public static FoolMan getInstance() { 16 if(instance==null) { 17 instance=new FoolMan(); 18 } 19 return instance; 20 } 21 }
执行结果:
单例设计模式总的代码示例:
1 public class 单例设计模式 { 2 public static void main(String[] args) { 3 // new SingleTon(); 4 /* SingleTon instance = SingleTon.getInstance(); 5 SingleTon instance1 = SingleTon.getInstance(); 6 System.out.println(instance==instance1);*/ 7 SingleTon1.fun(); 8 SingleTon1 in1 = SingleTon1.getInstance(); 9 SingleTon1 in2 = SingleTon1.getInstance(); 10 System.out.println(in1==in2); 11 } 12 } 13 // 单例设计模式 -- 饿汉式 14 class SingleTon{ 15 //1. 构造方法私有 16 private SingleTon() { 17 } 18 //2. 为外界提供一个对象 19 private static SingleTon instance=new SingleTon();//int a=5; 20 //3. 将对外提供的对象,封装,私有的属性共有的方法,对外提供 getter 方法,让其他类可以获取该对象 21 // 4. 为了能够使用类名进行调用,使用 static 进行修饰 22 public static SingleTon getInstance() { 23 return instance; 24 } 25 } 26 // 单例设计模式 -- 懒汉式 27 class SingleTon1{ 28 //1. 构造方法私有 29 private SingleTon1() { 30 System.out.println("aaaa"); 31 } 32 //2. 为外界提供一个对象 33 private static SingleTon1 instance=null;// 34 //3. 将对外提供的对象,封装,私有的属性共有的方法,对外提供 getter 方法,让其他类可以获取该对象 35 // 4. 为了能够使用类名进行调用,使用 static 进行修饰 36 public static SingleTon1 getInstance() { 37 // 判断对象如果为 null 就创建 38 if(instance==null) { 39 instance=new SingleTon1(); 40 } 41 return instance; 42 } 43 public static void fun() {} 44 }
枚举:
. 枚举: 有限个数值 / 对象。
2. 性别 , 星期,交通灯,季节
3. 一般的类来模拟枚举类的实现。 ( 季节来模拟 )
①. 格式 :
关键字 enum 该关键字表示枚举类。
②. 枚举类中对象写在第一行。并且多个枚举对象之间用逗号隔开,最后一个跟分号 , 并且枚举对象一般用大写
。
③. 枚举类实质还是一个类,类的特性它都有:
类的成员。属性 方法 构造方法 抽象方法
代码示例:
1 public static void main(String[] args) { 2 // System.out.println(SeasonE.SPRING); 3 // 调用枚举类中的方法 4 /* SeasonE.SPRING.fun(); 5 SeasonE.AUTUMN.fun();*/ 6 SeasonE.SPRING.display(); 7 } 8 } 9 // 枚举类 10 enum SeasonE{ 11 // SPRING,SUMMER,AUTUMN,WINTER; 12 // 有参构造形式 13 SPRING(" 春季 "){ 14 @Override 15 public void display() { 16 System.out.println(" 鸟语花香 "); 17 } 18 },SUMMER(" 夏季 ") { 19 @Override 20 public void display() { 21 System.out.println(" 烈日炎炎 "); 22 } 23 },AUTUMN(" 秋季 ") { 24 @Override 25 public void display() { 26 System.out.println(" 秋高气爽,硕果累累 "); 27 } 28 },WINTER(" 冬季 ") { 29 @Override 30 public void display() { 31 System.out.println(" 寒风刺骨 "); 32 } 33 }; 34 String desc; 35 public void fun() { 36 System.out.println(" 这是季节的描述 "); 37 } 38 // 构造方法 必须被私有 39 /*private SeasonE() { 40 }*/ 41 private SeasonE(String desc) { 42 this.desc=desc; 43 } 44 // 抽象方法 描述不同季节的特征 45 public abstract void display(); 46 } 47 class A{ 48 SeasonE m; 49 }
枚举应用之交通灯:
代码示例:
1 public class 交通灯描述交通行为 { 2 public static void main(String[] args) { 3 // 选择其中一个对象,执行行为 4 Scanner sc=new Scanner(System.in); 5 System.out.println(" 请选择灯的颜色, 1. 红灯 2. 绿灯 3. 黄灯 "); 6 /*int choose = sc.nextInt(); 7 switch (choose) { 8 case 1: 9 TrLight.RED.action(); 10 break; 11 case 2: 12 TrLight.GREEN.action(); 13 break; 14 case 3: 15 TrLight.YELLOW.action(); 16 break; 17 }*/ 18 //switch 的小括号的数据类型 可以是 byte short char -- 》 int 在 1.7jdk 之后 String 。 enum 枚举类也支 19 持 20 TrLight t=TrLight.valueOf(sc.next().toUpperCase()); 21 switch(t) { 22 case RED:t.action();break; 23 case GREEN:t.action();break; 24 case YELLOW:t.action();break; 25 } 26 //name 枚举对象的常量名称 27 /*System.out.println(TrLight.RED.name()); 28 //ordinal 枚举对象的序号,从 0 开始 29 System.out.println(TrLight.GREEN.ordinal()); 30 //toString() 枚举对象的常量名称 31 System.out.println(TrLight.YELLOW.toString());*/ 32 //valueOf(name) 根据 name 返回枚举类的常量对象 33 // System.out.println(TrLight.valueOf("RED")); 34 } 35 } 36 // 枚举类 格式 : enum 枚举类的名称 37 enum TrLight{ 38 // 红绿黄 39 RED { 40 @Override 41 public void action() { 42 System.out.println(" 红灯停 "); 43 } 44 },GREEN { 45 @Override 46 public void action() { 47 System.out.println(" 绿灯行 "); 48 } 49 },YELLOW { 50 @Override 51 public void action() { 52 System.out.println(" 黄灯等待 "); 53 } 54 }; 55 // 不同灯亮起时的行为 56 public abstract void action(); 57 }
网络编程:
1. 网络 :在不同的地域,通过终端设备 ( 台式机,笔记本, pad) 和传输设备 ( 路由器,交换机,网线 ) 进行连接的网状结
构。
2. 网络的目的:
资源共享。
3. 网络三要素 :
① IP :分配给互联网上的每台计算机的唯一地址。
1 》 IPV4:32 位 ,每 8 位换算成一个十进制。
点分十进制 : 255.255.255.255
分为 A-E 五类地址。
**① 127.0.0.1 /localhost 本地回环地址 代表本机地址。
2 》 IPV6: 128 位,
冒分十六进制: ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
3 》本机 ip 的查看: ipconfig
② 端口号: 0-65535 之间。
用来区分同一台计算机上不同的软件的。建议自定义的端口号从 8000 往后
。
③ 协议:互联网之间进行通信的规则。