一.单例模式(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模式.