Android常见设计模式汇总

创建型模式5种:单例模式,抽象工厂模式,工厂模式,原型模式,建造者模式。
结构型模式7种:适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式。
行为型模式11种:观察者模式,中介者模式,访问者模式,解释器模式,迭代器模式,备忘录模式,责任链模式,状态模式,策略模式,命令模式,模板模式。
1.单例模式
定义:确定某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
使用场景:确保某一个类有且只有一个对象的场景,避免产生对公对象消耗过多的资源,或者某种类型的对象只应该有且只有一个。例如,创建一个对象需要消耗过多的资源,如访问IO和数据库资源。
单例示例:通过构造方法的私有化,使得客户端不能通过new的形式手动构造单例类的对象,单例类会暴露一个共有静态方法(构造对象和公共方法都是静态的)
饿汉单例模式:提前new一个单例对象。
懒汉单例模式:在静态的公共方法中new一个对象(加一个锁机制)

public static Singleton getInstance(){
     if(singleton == null)
     {
         synchronized(Singleton.class)
         {
             if(singleton == null)
             {
              singleton = new Singleton();
             }
         }
     }
}

2.工厂模式
定义:定义一个用于创建对象的接口,让子类决定实例化哪个类
使用场景:在任何需要生成复杂对象的地方,都可以使用工厂模式。复杂对象适合使用工厂模式,用new就完成创建的对象无需使用工厂模式。
观察者,我们称它为Observer,有时候我们也称它为订阅者,即Subscriber
被观察者,我们称它为Observable,即可以被观察的东西,有时候还会称之为主题,即Subject
3.观察者模式
定义:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,所有依赖它的对象都会得到通知并被自动更新。(观察者实现observer接口,被观察者需要实现observable)
4.代理模式
定义:为其他对象提供一种代理以控制对这个对象的访问。
使用场景:当无法或不想访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象和代理对象需要实现相同的接口。
5.Builder模式
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
使用场景:对话框、Gson数据、网络请求、StringBuilder和StringBuffer。

public class Person {
    private String name;
    private int age;
    private double height;
    private double weight;

    privatePerson(Builder builder) {
        this.name=builder.name;
        this.age=builder.age;
        this.height=builder.height;
        this.weight=builder.weight;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    public double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }

    static class Builder{
        private String name;
        private int age;
        private double height;
        private double weight;
        public Builder name(String name){
            this.name=name;
            return this;
        }
        public Builder age(int age){
            this.age=age;
            return this;
        }
        public Builder height(double height){
            this.height=height;
            return this;
        }

        public Builder weight(double weight){
            this.weight=weight;
            return this;
        }

        public Person build(){
            return new Person(this);
        }
    }

于是我们就可以这样创建Person类。

Person.Builder builder=new Person.Builder();
Person person=builder
        .name("张三")
        .age(18)
        .height(178.5)
        .weight(67.4)
        .build();

你可能感兴趣的:(Android常见设计模式汇总)