单例设计模式&枚举&网络编程

设计模式:

是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结
: 套路    模式

前人已经经过大量测试得出的设计模式

 使用设计模式的好处:提高代码的可重用性与可靠性。

单例设计模式 :  
单个实例 == 》单个对象   意味着只能创建一个对象,就好电脑的任务管理器,只能有一个窗口。

单例设计模式:
① 私有构造方法
② 对外提供一个对象,供其他的类访问,但是该对象需要封装,通过 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 往后

③ 协议:互联网之间进行通信的规则。