还在埋头敲代码?不妨学学设计模式,必能让你工作事半功倍

设计模式在开发中占很重要的地位;在大型项目中使用好设计模式往往会取得事半功倍效果;下面就介绍下几种在开发中常用到的设计模式

装饰者模式(Decorator Pattern)

装饰者模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能;它是通过创建一个包装对象,也就是装饰来包裹真实的对象

特点

何时使用

优点

缺点

单例模式

单例模式是我们在开发种经常使用到的一种设计模式;单例模式创建的类在当前进程种只有一个实例,并有一个访问它的全局入口

优点

缺点

适用场景

单例模式实现

//单例模式的实现很多中,这里展示一种最常用的实现。代码如下:
public class SingletonDemo {
    
    private static volatile SingletonDemo sInstance = null;
    private SingletonDemo(){}
    
    public static SingletonDemo getInstance(){
        if(sInstance == null){
            synchronized (SingletonDemo.class){
                if(sInstance == null){
                    sInstance = new SingletonDemo();
                }
            }
        }
        return sInstance;
    }
    
    public void  printSomething(){
        System.out.println("this is a singleton");
    }
}

这种写法的好处有以下几点:

//使用静态内部类的方式实现
public class Singleton{
    private Singleton(){}
    public static Singleton getInstance(){
       return SingletonHolder.sInstance;
    }
    private static class SingletonHolder{//该类之所以是static是因为sInstance是静态的,如果不设为静态会报错
       private static final Singleton sInstance=new Singleton();//重点在于确定是哪个类的单例
    }
    public void printSomething(){
        System.out.println("this is a singleton");
    }
}

策略模式

定义:策略模式定义了一系列算法,并将每一个算法封装起来,而且使他们可以相互替换,策略模式让算法独立于使用的客户而独立改变

最常见的就是关于出行旅游的策略模式,出行方式有很多种,自行车,汽车,飞机,火车等,如果不使用任何模式,代码是这样子的

publicclassTravelStrategy{

enumStrategy{

WALK,

PLANE,

SUBWAY

}

privateStrategystrategy;

publicTravelStrategy(Strategystrategy){

this.strategy=strategy;

}

publicvoidtravel(){

if(strategy==Strategy.WALK){

print("walk");

}elseif(strategy==Strategy.PLANE){

print("plane");

}elseif(strategy==Strategy.SUBWAY){

print("subway");

}

}

publicvoidprint(Stringstr){

System.out.println("出行旅游的方式为:"+str);

}

publicstaticvoidmain(String[]args){

TravelStrategywalk=newTravelStrategy(Strategy.WALK);

walk.travel();

TravelStrategyplane=newTravelStrategy(Strategy.PLANE);

plane.travel();

TravelStrategysubway=newTravelStrategy(Strategy.SUBWAY);

subway.travel();

}

很明显,如果需要增加出行方式就需要在增加新的 else if 语句,那么如何用策略模式来解决这个问题

首先,定义一个策略的接口

publicinterfaceStrategy{

voidtravel();

}

然后根据不同的出行方法来实现该接口

publicclassWalkStrategyimplementsStrategy{

@Override

publicvoidtravel(){

System.out.println("walk");

}

}publicclassPlaneStrategyimplementsStrategy{

@Override

publicvoidtravel(){

System.out.println("plane");

}

}publicclassSubwayStrategyimplementsStrategy{

@Override

publicvoidtravel(){

System.out.println("subway");

}

此外还需要一个包装策略的类,来调用策略中的接口

publicclassTravelContext{

Strategystrategy;

publicStrategygetStrategy(){

returnstrategy;

}

publicvoidsetStrategy(Strategystrategy){

this.strategy=strategy;

}

publicvoidtravel(){

if(strategy!=null){

strategy.travel();

}

}

测试一下代码:

publicclassMain{

publicstaticvoidmain(String[]args){

TravelContexttravelContext=newTravelContext();

travelContext.setStrategy(newPlaneStrategy());

travelContext.travel();

travelContext.setStrategy(newWalkStrategy());

travelContext.travel();

travelContext.setStrategy(newSubwayStrategy());

travelContext.travel();

}

}

以后如果再增加什么别的出行方式,就再继承策略接口即可,完全不需要修改现有的类

策略模式的优点

策略模式的缺点

小结

以上就是对 Android 开发中常用的装饰者模式、单例模式、策略模式的认识;有需要了解更多设计模式的小伙伴,可以私信发送“进阶” 即可 免费领取一份 Android 全套进阶技术知识学习文档+大厂面试真题及答案解析 PDF 文档,助你更快的掌握 Android 相关的技术知识

内容展示如下:

架构设计必入技能详解

由于篇幅原因,资料就不完全展示了,以上的资料保证100%免费最后大家如果觉得手册内容有用的话,可以点赞分享一下哦~

展开阅读全文

页面更新:2024-04-30

标签:模式   子类   事半功倍   静态   算法   接口   定义   对象   策略   代码   功能   系列   工作

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top