设计模式
单例模式
实例永远只有一个(工具类,应用程序)
a.在整个工程中任意的地方获取到他的引用
b.全局数据共享。
// 1.懒汉式---直接在声明本类静态对象的时候,就直接初始化了
// 私有化构造方法
private User() {
}
// 创建本类静态实例
// 直接创建的实例就是懒汉式
// 缺点是 直接加载类就会消耗资源,不管你用不用
// 优点是 不会有任何的线程问题
private static User user = new User();
// 创建外部访问的接口
public static User getInstance() {
return user;
}
// 2.饿汉式不直接创建对象,而是在访问方法getInstance在去创建
private static Person person;
private Person() {
}
public static Person getInstance() {
if (person == null) {
synchronized (obj) {
if (person == null) {
person = new Person();
}
}
}
return person;
}
//3.登记式---必须在HashMap中登记。登记过的对象就是唯一对象。
private static HashMap<String, Student> map = new HashMap<>();
private Student() {
}
public static Student getInstance(String key) {
if (map.get(key) == null) {
map.put(key, new Student());
}
return map.get(key);
}
工厂模式
用来创建对象的。在产品族比较多的情况下使用。
// KFC 里面有很多产品
// 工厂来帮你创建对象,而不是自己创建
KFCFactory factory = new KFCFactory();
Eatable food = factory.create("汉堡");
food.eat();
class KFCFactory {
public Eatable create(String name) {
switch (name) {
case "汉堡":
return new 汉堡();
case "薯条":
return new 薯条();
case "上校":
return new 上校鸡块();
default:
return null;
}
}
}
interface Eatable{
void eat();
}
class 汉堡 implements Eatable{
public void eat(){
system.out.println("汉堡好吃");
}
}
建造者模式
用来创建对象的,关注的不是产品族而是产品细节。
为了构建一个超级复杂的对象时产生的。
/*
1.声明内部类Builder
2.在构造方法中创建外部类的实例
3.实现返回类型是本类的方法
4.实现返回类型是外部类的方法
*/
Person person = new Person.Builder().makeXXX().builder();
class Person{
String private name;
class Builder{
Person person;
Public Builder(){
person = new Person();
}
public Builder makeXXX(String name){
person.name = name;
return this;
}
public Person builder(){
return person;
}
}
}
Context上下文
应用程序的边界,用来划分功能
1.获取资源,getResource getAsstes getContentResolver
2.启动其他组件, startActivity,startService,sendBroadCast
3.获取系统服务, getSystemService();
4.Context个数=Activity个数+Service个数+Application(只能一个)
5.Application它的Context的生命周期非常的长
Toast
在开发中,toast提示是经常会用到,我们需要用它去给用户一些比较轻量级且不需要与进行人机交互的提示文案。如果需要与用户进行交互,不建议使用toast,推荐使用notification。
简单Toast
Context context = getApplicationContext();
CharSequence text = "Hello toast!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show()
自定义Toast
//设置View
toast.setView(layout);
//设置时间
toast.setDuration(Toast.LENGTH_LONG);
//改变显示位置
toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
1.没有焦点,他不能和用户进行任何的交互,只能显示
2.自动关闭,时间到了自动消失
3.自带淡入淡出的动画
缺点:排队。如果短时间多次弹出来的信息,不要使用Toast。
:::显示不重要的信息,经常会被忽略。