• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android四种常见设计模式说明

Android四种常见设计模式说明

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了简要说明mvc设计模式,举例说明mvc设计模式,常见的设计模式,java常见的设计模式,java中常见的设计模式等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android四种常见设计模式说明


前言:

Android开发的设计模式,基本设计思想源于java的设计模式,java的设计模式有N多种,据不完全统计,迄今为止,网络出现最频繁的大概有23种。Java只是一门开发语言,学会并掌握这门语言进行代码编写,这是每个程序员必修的课程,但如何写出高质量、易维护和复用性强的代码,那就体现出程序员的层次和水平了。设计模式的出现就是为了解决这些问题。

开始学习设计模式的时候,我们通常都有种将简单问题复杂化的感觉,明明一个类N行代码就能完成的事情,干嘛非要创建几个类?又抽象又难理解的。后来随着开发经验的增长,重复劳动的频繁,终有一天顿悟,体验到设计模式的妙用,方感慨万千。常言,水滴石穿,做任何事都是这样,经验和时间是最好的试金石。

1.工厂模式:

什么是工厂模式?比如公司有个这样一个需求,在App中要使用到LBS定位来实现某些功能。产品技术一大堆开始了需求、技术确认会,当大家讨论到定位是用百度API来实现,还是用高德来实现。大家争论不休,有人说百度定位不准,有人说高德定位不准,众说纷纭。咋办?最后,B总拍板,两个一起用,哪个好用哪个,领导拍板了,但说了又等于没说,咋办?工厂模式这时候就呼之欲出了,我两个都给你设计,代码设个开关和参数,你说用高德不爽,我改个参数,就换百度,直到领导高兴为止,于是代码就产生了。

public class test {
       public static void main(String[] args) {
              Location position= new LocationFactory().getInstance("gaode");
              position.getPosition();
              position.getCityName(10, 20);
       }
}
  
class LocationFactory{
       public static Location getInstance(String type){
              if("baidu".equals(type)){
                     return new BaiduLocation();
              }else {
                     return new GaodeLocation();
              }
       }
}
class BaiduLocation implements Location{
       @Override
       public void getPosition() {
              // TODO Auto-generated method stub
              System.out.println("通过百度定位获取到当前的经纬度是XXXXX");
       }
       @Override
       public void getCityName(long lat, long lng) {
              // TODO Auto-generated method stub
              System.out.println("通过百度定位获取到当前的城市是XXXXX");
       }
}
class GaodeLocation implements Location{
       @Override
       public void getPosition() {
              // TODO Auto-generated method stub
              System.out.println("通过高德定位获取到当前的经纬度是XXXXX");
       }
       @Override
       public void getCityName(long lat, long lng) {
              // TODO Auto-generated method stub
              System.out.println("通过高德定位获取到当前的城市是XXXXX");
       }
}
interface Location{
       public void getPosition();
       public void getCityName(long lat,long lng);
}

上面的例子,较好的阐述了工厂模式的概念。LocationFactory是一个工厂类,静态函数getInstance的参数决定了是选用百度还是高德,这样,对于调用者来说,只需要关心你是用百度还是高德即可。Location是一个接口,它抽象出高德和百度常用的函数调用。拿定位来说,基本上常用的就是根据经纬度查询地址,或者定位当前所在位置获取经纬度。当然可能还有更多有用的函数,我这里就不在列举。有了这样一个共性的接口,GaodeLocation和BaiduLocation通过实现它的接口就能分别满足调用者的需求。调用者就能够任意通过改变参数,来实现来自不同定位API的需求。当然,如果百度和高德不爽,你完全可以使用谷歌API,只需要构造一个GoogleLocation类并实现Location接口的方法即可。

工厂模式的应用非常广泛,比如android的bitmap中常用的BitmapFactory类,创建Bitmap对象,通常使用静态工厂方法。

2.单例模式:

什么是单例模式?单例模式的精髓主要在这个“单”字上,“单”就是一个,直接进入主题,我们通常使用“new”关键字创建一个对象,一旦“new”了,它就会开辟内存创建一个对象。假设我们经常反复创建的这个对象对我们来说其实都是一回事,那么我们就没必要浪费资源和时间嘛,好比,你去外地出差在某个地方至少1天,第一次你去服务台,服务台给你开了间房,你高高兴兴的拿着钥匙进房睡觉了。睡醒后出去办事。完事后,你是不是直接拿着这个钥匙直接奔你开好的房间?该不会去服务台再去开一间吧?大道至简,其实,细细想来,生活就是一种模式,只要你善于发现,你就会有意外惊喜,原来都是这样简单。

来个例子吧,枯燥的代码。

public class Room {
       public static Room key;
       public static void main(String[] args) {
              Room room=getKey();
              room.openDoor();
              Room room1=getKey();
              room1.openDoor(); 
       }
       public static Room getKey(){
              if(key==null){
                     key=new Room();
              }
              return key;
       } 
       public void openDoor(){
              System.out.println("我打开了门......");
       }
}

看看上面这个例子,是不是跟我举得宾馆的例子相似?这样做,既节约了宾馆的时间,也节约了你的时间,多好啊。再引申一点说,android开发中也常常使用到单例模式,比如网络的封装,数据库的访问都用到了单利的设计模式。

3.观察者模式:

什么是观察者模式?一般提到原告,必然脑子立刻联想到被告,观察者和被观察者就如同原告和被告总是那么成对出现。观察者模式,又被叫做订阅模式,有订阅者和发布者。当下IPHONE6异常火爆,国内粉丝要想购买,那必须得预定,必须到它苹果官方去预定,填一大堆资料,交不交钱我不知道,反正得预定登记。等粉丝等到两眼欲穿、花儿快谢了时候,它粉墨登场了,官方以高姿态从容向预定过的粉丝发售。这苹果就是被观察者,粉丝就是观察者,观察者和被观察者之间需要建立联系,那就是登记。登记过后,被观察者拿捏火候觉得时机成熟的时候,就以权位者姿态向观察者抛出绣球,观察者迫不及待的伸出双手牢牢抓住后,满心欢喜的赞美苹果的伟大和自己的庆幸。睁大眼睛盯着目标看,期待期望结果,这就是观察者模式。

来段代码体验

import java.util.ArrayList;
import java.util.List;
  
  
public class MyOberver {
        public static void main(String[] args) {
               American american=new American();
               Chinese chinese=new Chinese();
               Iphone iphone=new Iphone();
               System.out.println("一个美国人登记购买");
               iphone.register(american);
               System.out.println("一个中国人登记购买");
               iphone.register(chinese);
               try {
                      System.out.println("经过6个月的漫长等待...");
                     Thread.sleep(2000);
              } catch (InterruptedException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
              }
               iphone.notifys();
       }
}
/**观察者*/
class Iphone{
       private List list=new ArrayList();
       public void register(Fensi n){
              list.add(n);
              System.out.println("又一个苹果被预订了,现在总共有:"+list.size()+"个人预订了...");
       }
       public void notifys(){
              System.out.println("IPHONE 6现在高调发售...");
              for (Fensi n:list) {
                            n.receive();
              }
       }
}
class American implements Fensi{
       @Override
       public void receive() {
              // TODO Auto-generated method stub
              System.out.println("美国人喊叫:嗯哼,有点贵....");
       }
}
class  Chinese implements Fensi{
       @Override
       public void receive() {
              // TODO Auto-generated method stub
              System.out.println("中国人:我终于买到了,高兴死了....");
       }
}
interface Fensi{
              public void receive();
}

运行后输出结果:

一个美国人登记购买

又一个苹果被预订了,现在总共有:1个人预订了...

一个中国人登记购买

又一个苹果被预订了,现在总共有:2个人预订了...

经过6个月的漫长等待...

IPHONE 6现在高调发售...

美国人喊叫:嗯哼,有点贵....

中国人:我终于买到了,高兴死了....

这就是观察者模式,Chinese和American都是观察者,它们继承了Fensi接口,具有了接收消息receive的能力,Iphone是被观察者,是被观察的目标,它的一举一动,都会深深的影响Fensi们的热情,观察者需要在被观察者哪里进行登记购

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android四种常见设计模式说明

相关文章

  • 2017-05-26Android数据存储方式--SharedPreferences,sharedpreferences
  • 2017-05-26ORA-16038/ORA-00742: Log read detects lost write in thread
  • 2017-05-26Touch事件分发
  • 2017-05-26ULog远程日志——让Android调试更加方便直观
  • 2017-05-26Android-Universal-Image-Loader (图片异步加载缓存库)的源码解读
  • 2017-05-26did not call through to super.onCreate(),didsuper.oncreate
  • 2017-05-26include的用法例子,以及include+merge的用法例子,includemerge
  • 2017-05-26谈谈App的混合开发,App混合开发
  • 2017-05-26好玩的Handler,好玩Handler
  • 2017-05-26Listview详解,listview

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 安卓开源项目周报0208,安卓开源项目0208
    • 安卓开源项目周报0411,安卓开源项目0411
    • Android 如何有效的解决内存泄漏的问题,android泄漏
    • Android中自定义视图View之---进阶篇(Canvas的使用)
    • Android软件开发之SharedPreferences,sharedpreferences
    • 在Windows下快速搭建React Native Android开发环境
    • JRebel for Android 1.0发布!,jrebelandroid
    • 【React Native开发】React Native控件之ViewPagerAndroid讲解以及美团首页顶部效果实例(17)
    • Android学习笔记-Button(按钮),android-button
    • 日志文件之出错处理

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有