常用的模式和算法

一.单例模式(Singleton):

懒汉式和饿汉式

package com.example.sampledesignmoudle;

/**
 * 项目名:     My Moudle
 * 包名:       ${APCKAGE_NAME}
 * 文件名:     SingleDemo
 * 创建者:     NYK
 * 创建day:    24
 * 创建的日期:   2016/12/24
 * 创建的时间:   17:49
 * 描述:  主要是对单例的复习,和两种单例的复习和比较和总结
 */
public class SingleDemo {
    // 单例    为什么叫做单例
    /**
     * 自我感觉,单例就是  这个类别人不能够直接new出来,再内存正保证只有一个这个类的实例
     *   问题就是: 我们怎么才能够不让别人直接new出来一个对象     new一个对象实际上是执行了空参构造方法,我们
     *   将这个空参的构造方法私用话,意味着这个对象别人不能够调用,我们只需要在这个类中提供一个对象直接让外界调用
     */
    //  单例的意义是什么
    /**
     * 保证内存中只用一个这个类的对象
     */

    // 两种单例的写法
    //第一就是饿汉式的方法
    //  提供一个对象,书写自己的get方法就行
    public static SingleDemo singleDemo = new SingleDemo();

    private void SingleDemo() {
        //私有空参的构造方法
    }

    public static SingleDemo getSingleDemo() {
        return singleDemo;
    }


    // 两种单例的比较  和安全问题  为什么
}


//第二种就是懒汉式的方法
class SingleDemo2{
     // 原理一样   都是私用自己的无参构造方法
    private void SingleDemo2(){

    }



    //静态的成员变量
    public  static  SingleDemo2 singleDemo2 ;


    // 提供给外界调用
    public static SingleDemo2 getSingleDemo2() {
        // 加一个判断
        if (singleDemo2 == null){
            singleDemo2 = new SingleDemo2();
        }
        return singleDemo2;
    }

}

总结: * 单例模式中,饿汉式是线程安全的,懒汉式在不加锁的基础上是线程不安全的,加上所之后每一次需要判断会影响效率的! * 饿汉式在类的创建的同时就已经创建好一个静态的变量供系统使用; * 懒汉式在加载类的时候速度是非常的快,但是在获取实例的时候要判断,没有实例会去创建实例,整体对比饿汉式而言是速度较慢 * 主要的是在存在线程安全问题

二.包装模式(Decorator)

也就是装饰模式

原理就够了!

包装模式和也称为是包装器模式,是对一个类的增强,常见的包装模式就是 StringBuffer 对String的包装; 还有就是流里面的包装.
包装模式;里面的几个角色
1. 第一个就是一个接口,有一个没有实现的接口
2. 还有一个就是被包装类,实现这个接口,重写了里面的方法
3. 还有一个包装类,用于对别包装类进行包装,对被包装来的方法进行增强的实现.
步凑: 当然是包装类和被包装类都需要实现接口,并重写里面的方法,
包装类中含有一个被包装类的对象引用.在包装类的实现接口的方法里面调用了被包装类的实现的方法,并对这个方法进行了加强!
1) 抽象构件角色(Component):定义一个抽象接口,以规范准备接收附加责任的对象。
相当于上面说的一个接口

2) 具体构件角色(Concrete Component):这是被装饰者,定义一个将要被装饰增加功能的类。
被包装类

3) 装饰角色(Decorator):持有一个构件对象的实例,并定义了抽象构件定义的接口。
装饰类,含有一个被包装类的对象.

4) 具体装饰角色(Concrete Decorator):负责给构件添加增加的功能。
添加的功能

 class BeiBaoZhuangDemo {


    public void baozhuang() {
        System.out.println("只是被包装类的方法");
    }
}


/**
 * 项目名:     My Moudle
 * 包名:       ${APCKAGE_NAME}
 * 文件名:     BeiBaoZhuang
 * 创建者:     NYK
 * 创建day:    24
 * 创建的日期:   2016/12/24
 * 创建的时间:   20:57
 * 描述: 这是一个包装类,用于包装增强里面的功能
 */
class BaoZhuang {

    //将被包装类最为一个成员变量俩保存
    private BeiBaoZhuangDemo baoZhuangDemo;
    public BaoZhuang (BeiBaoZhuangDemo b) {
        baoZhuangDemo = b;


    }
    /**
     *  包装类就是对被包装类的一个增强功能,具体就是,包装类可以实现其他方法,也具有了自己的方法,具有的方法就是
     * 增强的功能;
     *   使用的时候,我们是使用包装后的类,使用
     */
    public  void  baozhuang(){
        baoZhuangDemo.baozhuang();
        //增强功能
        System.out.println("包括了增强能");
    }


}

三.适配器模式(Adapter)

为什么需要适配器模式
使用的情景: 在使用一个监听器的时候,需要我们继承衣一个监听器的接口,这个接口中会有很多的方法,我们需要的一个方法,
这就需要使用到适配器模式: 我们写一个类,实现这个接口,需要的时候直接继承这个类,这个类也所谓就是适配器.

  • 第一就是一个适配器实现这个监听器的接口,重写里面的方法,当是不需要方法里面都是空的
  • 第二: 在需要监听器的一个方法的时候,我们你不在直接实现监听器接口,而是直接继承适配器,重写里面的需要的方法就行

四.工厂模式(FactoryMethod)

工厂模式中,分为简单的工厂模式(静态工厂模式)和工厂模式

简单工厂模式,就是静态工厂模式这个工厂具体的负责实例的创建.
好处: 就是客户端不需要负责对象的创建,而是由简单的工厂负责创建
缺点就是; 加入一个新的对象的时候,我们需要修改简单工厂,不利于后期的维护.
工厂方法就是,将创建对象的直接交给相应的对象的工厂去实现,工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。

五.mvc模式

就是常见三层架构而来,三层架分别是: 表示层 业务逻辑层 数据库操作层
mvc是比较m就是 modle 在android标识的就是实体类 例如javabean v表示的就是 view 是展示页面 c 是control 标示的就是activity
控制和逻辑都在activity中实现,随着业务的增多,控制层会出现越来越麻烦和可读性查等缺点
在看看那个微信公众号的文章

六.冒泡排序

int[] argss = new int[]{3, 1, 9, 45, 33, 4, 88, 5, 7, 99, 35};
伪代码: 
   外层循环控制的是循环的次数,内层循环控制的相邻数字之间的比较
 for (int i = 0; i < argss.length - 1; i++) {
            for (int j = 0; j < argss.length - 1 - i; j++) {
                // 获取第一个数和下一个数和第三个变量
                int temp = 0;
                if (argss[j] > argss[j + 1]) {
                    // 表示的就是第一个数比第二数大,交换位置
                    temp = argss[j];
                    argss[j] = argss[j + 1];
                    argss[j + 1] = temp;

                }
            }
        }

今晚写到这里,一个新手,望大家带领下学的更上一层楼,后续补上,快速,二分法和mvp模式.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值