Android 设计模式

单例模式:一种对象创建模式,用于产生一个对象的具体实例,确保系统中一个类只有一个实例

好处:a,对于频繁使用对象,可以省略多次创建对象的时间。对于重量级对象而言,可以节省性能开销

b,new操作次数减少

实现思路:1.将该类的构造方法使用private修饰,将实例化代码留在类内部

2.暴露一个公开方法提供给使用者获取该实例

 

饿汉式:

优点:写法简单,由于实例化代码是static修饰的,该类在被虚拟机加载的时候就会完成实例化,避免线程同步问题,而且后续在使用时无需等待实例化,效率高

缺点:由于类加载时候就会初始化,此时需要初始化大量数据,将会增加App启动速度,同时,后续如果长时间没有使用该变量,将会造成系统内存浪费

public class Only {

 

    private static Only song = new Only();

 

    private Only(){ }

 

    public static Only getInstance(){

        return song;

    }

    

}

 

懒汉式:

优点:将类的初始化放到了开发者调用时,起到了延迟加载的效果,某些情况也能避免内存浪费,同时通过synchronized关键字实现线程安全,这样使得该对象只实例化一次

缺点:每个线程在访问该方法时都要去获取锁,降低访问效率

 

    private static Only song;

 

    private Only(){}

 

    public static synchronized Only getInstance(){

        if (song == null) {

            song = new Only();

        }

        return song;

    }

 

构建者模式(建造者模式):将一个复杂对象的创建和表示进行分离,使得同样的构建过程可以创建不同的表示

优点:写法简洁,代码优美,开发者无需了解对象内部组成的细节,只需关心自己需要什么对象

 

工厂模式:工厂模式专门负责将大量有共同接口的类实例化,可以动态决定将哪一个类实例化,而不必事先知道每次要实例化哪个类

简单工厂模式,即定义一个类来负责其他类的实例化,被创建者的实例通常有共同的父类或者实现了同一个接口

public interface Animal {

 

}

public class Cat implements Animal {

 

    private String fish;

 

    public Cat(String fish) {

        this.fish = fish;

    }

}

public class Dog implements Animal {

 

    private String bone;

 

    public Dog(String bone) {

        this.bone = bone;

    }

}

public class AnimalFactory {

    

    public static Animal CreateCat(String fish){

        return new Cat(fish);

    }

 

    public static Animal CreateDog(String bone){

        return new Dog(bone);

    }

}

 

工厂方法模式:用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类;在该模式中,核心工厂类不再负责所有产品创建,只是定义创建对象的方法,将具体任务交给子类去做

public interface CatFactory {

 

    Cat createFactory(String fish);

}

public class ChinaCatFactory implements CatFactory {

    @Override

    public Cat createFactory(String fish) {

        return new Cat(fish);

    }

}

public class AmericaCatFactory implements CatFactory {

    @Override

    public Cat createFactory(String fish) {

        return new Cat(fish);

    }

}

抽象工厂模式:提供一个创建一系列或相互依赖的对象的接口,而无需指定它们的具体类

public interface CatFactory {

 

    Cat createOrangeCat(String fish);

    Cat createAmericaCat(String fish);

    Cat createPuppetCat(String fish);

}

//中国猫工厂只创建橘猫

public class ChinaCatFactory implements CatFactory {

 

    @Override

    public Cat createOrangeCat(String fish) {

        return new Cat(fish);

    }

 

    @Override

    public Cat createAmericaCat(String fish) {

        return null;

    }

 

    @Override

    public Cat createPuppetCat(String fish) {

        return null;

    }

}

//美国猫工厂只创建布偶猫和美短猫

public class AmericaCatFactory implements CatFactory {

 

    @Override

    public Cat createOrangeCat(String fish) {

        return null;

    }

 

    @Override

    public Cat createAmericaCat(String fish) {

        return new Cat(fish);

    }

 

    @Override

    public Cat createPuppetCat(String fish) {

        return new Cat(fish);

    }

}

 

观察者模式:实现方式是:先定义观察者和目标的基类,目标需要提供维护观察者的方法(比如注册和解除注册),观察者需要提供更新接口;接下来具体的观察者和具体的目标就继承基类,具体观察者将自己注册到具体目标中,这样当具体目标类发生变化时,就可以调用已注册的观察者的更新方法

 

观察者模式和发布定阅模式的区别:

发布订阅模式统一由调度中心调度,而观察者模式由具体目标进行调度

发布订阅模式中订阅者和发布者不存在耦合,而观察者模式中观察者和目标存在耦合关系

参考:https://blog.csdn.net/qq_30993595/article/details/88954748

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值