设计模式在开发中占很重要的地位;在大型项目中使用好设计模式往往会取得事半功倍的效果;下面就介绍下几种在开发中常用到的设计模式
装饰者模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能;它是通过创建一个包装对象,也就是装饰来包裹真实的对象
单例模式是我们在开发种经常使用到的一种设计模式;单例模式创建的类在当前进程种只有一个实例,并有一个访问它的全局入口
//单例模式的实现很多中,这里展示一种最常用的实现。代码如下:
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
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号