Android中的设计模式
来源:互联网 发布:数据库resource权限 编辑:程序博客网 时间:2024/06/09 21:32
参考文章
1,Android开发中常见的设计模式
http://www.cnblogs.com/android-blogs/p/5530239.html
2,Android源码设计模式分析开源项目
https://github.com/simple-android-framework-exchange/android_design_patterns_analysis
3、 Android 设计模式
http://blog.csdn.net/banketree/article/details/24985607
4、《Android深入透析》之常用设计模式经验谈
https://my.oschina.net/u/2249934/blog/343441
5、设计模式(有23种模式的应用实例、何时使用等说明)
http://www.runoob.com/design-pattern/design-pattern-tutorial.html
6、传智播客设计模式视频教程
链接:http://pan.baidu.com/s/1i3QNjHN 密码:ezyn
7、Android学习——ActivityManager与Proxy模式的运用
http://www.cnblogs.com/bastard/archive/2012/05/25/2517522.html
单例模式
private static volatile EventBus defaultInstance;public static EventBus getDefault() { if (defaultInstance == null) { synchronized (EventBus.class) { if (defaultInstance == null) { defaultInstance = new EventBus(); } } } return defaultInstance;}
Build模式
AlertDialog.Builder builder=new AlertDialog.Builder(this);AlertDialog dialog=builder.setTitle("标题") .setIcon(android.R.drawable.ic_dialog_alert) .setView(R.layout.myview) .setPositiveButton(R.string.positive, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .setNegativeButton(R.string.negative, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .create();dialog.show();
观察者模式
private List<OnScrollListener> mScrollListeners;public void addOnScrollListener(OnScrollListener listener) { if (mScrollListeners == null) { mScrollListeners = new ArrayList<OnScrollListener>(); } mScrollListeners.add(listener);}public void removeOnScrollListener(OnScrollListener listener) { if (mScrollListeners != null) { mScrollListeners.remove(listener); }}public void clearOnScrollListeners() { if (mScrollListeners != null) { mScrollListeners.clear(); }}
原型模式
public Object clone() { return new Bundle(this);} public Bundle(Bundle b) { super(b); mHasFds = b.mHasFds; mFdsKnown = b.mFdsKnown;}####浅拷贝和深拷贝@Overridepublic Object clone(){//浅拷贝 Person person=null; try { person=(Person)super.clone(); person.name=this.name; person.weight=this.weight; person.height=this.height; person.age=this.age; person.hobbies=this.hobbies; } catch (CloneNotSupportedException e) { e.printStackTrace(); } return person;}@Overridepublic Object clone(){//深拷贝 Person person=null; try { person=(Person)super.clone(); person.name=this.name; person.weight=this.weight; person.height=this.height; person.age=this.age; person.hobbies=(ArrayList<String>)this.hobbies.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return person;}//测试代码public class Main { public static void main(String [] args){ Person p=new Person(); p.setAge(18); p.setName("张三"); p.setHeight(178); p.setWeight(65); ArrayList <String> hobbies=new ArrayList<String>(); hobbies.add("篮球"); hobbies.add("编程"); hobbies.add("长跑"); p.setHobbies(hobbies); System.out.println(p); Person p1= (Person) p.clone(); System.out.println(p1); p1.setName("李四"); p1.getHobbies().add("游泳"); System.out.println("clone test:"+p);//这一句浅拷贝和深拷贝打印有区别,浅拷贝只是拷贝一个印有(没有生成新的对象,原对象和拷贝对象指向的是同一个对象),深拷贝会创建一个新的对象 System.out.println(p1); }}//浅拷贝和深拷贝打印的只有"clone test:"+p 这一句有别//浅拷贝clone test:Person{name=’张三’, age=18, height=178.0, weight=65.0, hobbies=[篮球, 编程, 长跑, 游泳]}//深拷贝clone test:Person{name=’张三’, age=18, height=178.0, weight=65.0, hobbies=[篮球, 编程, 长跑]}
策略模式
public interface Strategy { void travel();}public class WalkStrategy implements Strategy{ @Override public void travel() { System.out.println("walk"); }}public class PlaneStrategy implements Strategy{ @Override public void travel() { System.out.println("plane"); }}
工厂模式
public class test { public static void main(String[] args) { Location position= new LocationFactory().getInstance("xiaomi"); position.getPosition(); position.getCityName(10, 20); }}class LocationFactory{ public static Location getInstance(String type){ if("baidu".equals(type)){ return new BaiduLocation(); }else { return new XiaoMiLocation(); } }}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 XiaoMiLocation 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);}
代理模式
/**什么是代理模式?代理模式在各类开发中运用的相当广泛,不论是j2ee,android还是ios,都能看到它的身影,所以说设计模式无处不在。代理模式,字面理解就是自己不方便做或者不能做的事情,需要第三方代替来做,最终通过第三方来达到自己想要的目的或效果。举例了:员工小李在B总公司打工,B总成天让小李加班不给加班费,小李忍受不住了,就想去法院告B总。虽然法律上允许打官司不请律师,允许自辩。但是小李第一不熟悉法律起诉的具体流程,第二嘴比较笨,人一多腿就抖得厉害。因此,小李决定去找律师帮忙打官司。找律师打官司和自己打官司相比,有相同的地方,也有不同的地方。相同的地方在于:1、 都需要提交原告的资料,如姓名、年龄、事情缘由、想达到的目的。2、 都需要经过法院的取证调查,开庭争辩等过程。3、 最后拿到审判结果。不同地方在于:1、 小李省事了,让专业的人做专业的事,不需要自己再去了解法院那一套繁琐复杂的流程。2、 把握更大了。通过上面的例子,我们注意到代理模式有几个重点。1、 被代理的角色(小李)2、 代理角色(律师)3、 协议(不管是代理和被代理谁去做,都需要做的事情,抽象出来就是协议)下面给个例子:*/public class Proxy { public static void main(String[] args) { Employer employer=new Employer(); System.out.println("我受不了了,我要打官司告老板"); System.out.println("找律师解决一下吧......"); Protocol lawyerProxy=new LawyerProxy(employer); lawyerProxy.register("朵朵花开"); lawyerProxy.dosomething(); lawyerProxy.notifys(); }}interface Protocol{ //登记资料 public void register(String name); //调查案情,打官司 public void dosomething(); //官司完成,通知雇主 public void notifys();}//律师类class LawyerProxy implements Protocol{ private Employer employer; public LawyerProxy(Employer employer){ this.employer=employer; } @Override public void register(String name) { // TODO Auto-generated method stub this.employer.register(name); } public void collectInfo(){ System.out.println("作为律师,我需要根据雇主提供的资料,整理与调查,给法院写出书面文字,并提供证据。"); } @Override public void dosomething() { // TODO Auto-generated method stub collectInfo(); this.employer.dosomething(); finish(); } public void finish(){ System.out.println("本次官司打完了..............."); } @Override public void notifys() { // TODO Auto-generated method stub this.employer.notifys(); } }//雇主类class Employer implements Protocol{ String name=null; @Override public void register(String name) { // TODO Auto-generated method stub this.name=name; } @Override public void dosomething() { // TODO Auto-generated method stub System.out.println("我是'"+this.name+"'要告B总,他每天让我不停的加班,还没有加班费。"); } @Override public void notifys() { // TODO Auto-generated method stub System.out.println("法院裁定,官司赢了,B总需要赔偿10万元精神补偿费。"); }}
感悟
不会设计模式的程序员知识结构不完整
面向接口编程、学会使用设计模式可以显著增强程序的可扩展性、可读性
0 0
- android 中的设计模式
- Android中的设计模式
- Android中的设计模式
- android中的设计模式
- Android中的设计模式
- Android中的设计模式
- Android中的设计模式
- Android中的设计模式
- android中的设计模式
- Android中的设计模式
- android中的设计模式
- 【设计模式】Android中的设计模式
- Android中的MVP设计模式
- Android 源码中的设计模式
- Android--->中的一些设计模式
- Android中的MVC设计模式
- java,Android中的设计模式
- Android 源码中的设计模式
- 信息的表示和处理(待补充)
- 即拿即用-选择头像,可以选择相册,拍照,查看大图,保存到本地
- spring10
- 端游、手游服务端常用的架构是什么样的?
- 513. Find Bottom Left Tree Value
- Android中的设计模式
- MAC OS查看端口占用情况及杀死进程
- Linux Kernel 学习笔记7:同步与互斥之自旋锁
- Spark源码学习笔记1-SparkContext
- Android 网络调试 tcpip 开启方法以及10061错误解决方法
- 网络游戏服务端的多线程模型
- python 命令行:help(),'more'不是内部或外部命令,也不是可运行的程序或批处理文件
- rownum用法
- 我的JAVA学习之路