• Java的几种设计模式


    如果从事JAVA相关的开发,都不可避免的要用到抽象和封装,这是JAVA的一个特点,同时也是每个开发者必须掌握的,JAVA是这样,Android更是如此。而设计模式就是告诉我们应该如何写出高效且更具应用性和拓展性的代码,最近也是学习了几类比较常用的设计模式,下面一一列举出来,虽然说的不细,但是应该知道的我会做个总结。

                                                            #####单例设计模式#####

     单例设计模式的一般定义:一个类中只允许有一个实例。

     实现思路:让类的构造方法私有化,同时提供一个静态方法去实例化这个类。

     代码 :

    复制代码
    static class SingleTon {
            private static SingleTon instance;
            private SingleTon(){};
            public static SingleTon newInstance() {
                if(instance==null) {
                    synchronized (SingleTon.class) {
                        if(instance==null) {
                            ins和tance=new SingleTon();
                        }
                    }
                }
                return instance;
    }
    复制代码

     这是一个较为标准的单例模式,为了安全我给他加了锁,然而这样写并不是最好的写法。单例模式有两种写法,懒汉写法和饿汉写法。

    懒汉式:在静态方法中初始化。时间换空间。(不推荐,时间很重要)

    饿汉式:在声明对象就初始化。空间换时间。(推荐,空间不是问题)

    所以,在实际开发中用的更多的是饿汉写法,可以对这个类加锁,在变量声明的时候就初始化。具体如何实现这里我就不介绍了,可以自己去实现。

                                                          #####简单工厂设计模式#####

    简单工厂设计模式的一般定义:简单工厂又叫静态工厂,由一个工厂对象决定创建哪一个产品对象。

    实现思路:写一个类,让他制造出我们想要的对象。

    代码:

    复制代码
    public class 学生工厂  {
        public static 学生 getStudent(int type) {
            switch (type) {
            case 学生类型.学神:
                return new 学神();
            case 学生类型.学霸:
                return new 学霸();
            case 学生类型.学弱:
                return new 学弱();
            case 学生类型.学渣:
                return new 学渣();
            default:
                break;
            }
            return null;
        }
    }
    复制代码

    通过这个工厂,我们可以很方便的生产出我们想要的对象。这里我用伪代码表示,为了更加形象,实际中这样的写法是绝对不允许的!

                                                       #####适配器设计模式#####

    适配器模式的一般定义:某类继承这个适配器,从而实现我们需要实现的方法。

    实现思路:通过写一个适配器类,里面写了所有的抽象方法,但是这些方法是空的,并且适配器类要定义成抽象的,如果适配器类可以自己实现就没有意义了。适配器的作用,继承适配器,重新需要重新的方法就可以了,简化操作。

     优点
        * 客户端不需要在负责对象的创建,从而明确了各个类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性。
    缺点
        * 需要额外的编写代码,增加了工作量

    代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    public class Adapter {
        public static void main(String[] args) {
            阿乐 a=new 阿乐();
            a.啪啪啪();
        }
     interface 谈恋爱 {
         void 吃饭();
         void 看电影();
         void 逛街();
         void 啪啪啪();
     }
     abstract class 恋爱中的妹子 implements 谈恋爱{
     
        @Override
        public void 吃饭() {
            // TODO Auto-generated method stub
             
        }
     
        @Override
        public void 看电影() {
            // TODO Auto-generated method stub
             
        }
     
        @Override
        public void 逛街() {
            // TODO Auto-generated method stub
             
        }
     
        @Override
        public void 啪啪啪() {
            // TODO Auto-generated method stub
             
        }
     }
      class 阿乐 extends 恋爱中的妹子{
         public void 啪啪啪() {
                // TODO Auto-generated method stub
                System.out.println("阿乐:亚美爹,好害羞");
            }
         }
    }

     这里我写了一个接口,接口中定义了几个方法,当某类实现这个接口的时候就需要实现这些方法。用时适配器不允许自己实现这些方法,需要交给他的子类去继承,让子类选择需要实现什么代码,Android中的Adapter就是用了适配器模式。

                                                               #####模板设计模式#####

    模板设计模式的一般定义:定义一个算法骨架将具体实现交给子类去实现。

    实现方法:在类中定义一个抽象方法,距离实现交由子类去实现

    代码:

    复制代码
    public class A {
      public final void run {
               ........
               void howRun();
               ........
       }
     public abstract void  howRun();
    
    }
    public class B extends A {
     public void howRun () {
               ..........
       }
    
    }
    复制代码

     

    优点
        * 使用模版方法模式,在定义算法骨架的同时,可以很灵活的实现具体的算法,满足用户灵活多变的需求
    缺点
        * 如果算法骨架有修改的话,则需要修改抽象类
  • 相关阅读:
    C#使用Xamarin开发Android应用程序 -- 系列文章
    stealwatch里的安全功能——ETA结果会显示加密套件以及key长度,还有流量大小(例如41MB)
    钟平---逻辑英语的语法讲解
    python dpkt 解析 pcap 文件
    TOR的十个最好的替代工具
    tf.expand_dims 来增加维度
    安天透过北美DDoS事件解读IoT设备安全——Mirai的主要感染对象是linux物联网设备,包括:路由器、网络摄像头、DVR设备,入侵主要通过telnet端口进行流行密码档暴力破解,或默认密码登陆,下载DDoS功能的bot,运行控制物联网设备
    使用深度学习检测TOR流量——本质上是在利用报文的时序信息、传输速率建模
    利用神经网络进行网络流量识别——特征提取的方法是(1)直接原始报文提取前24字节,24个报文组成596像素图像CNN识别;或者直接去掉header后payload的前1024字节(2)传输报文的大小分布特征;也有加入时序结合LSTM后的CNN综合模型
    算法培训
  • 原文地址:https://www.cnblogs.com/steamedbun/p/9376503.html
Copyright © 2020-2023  润新知