自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 桥接设计模式

桥接设计模式模式定义使用场景例子总结模式定义将抽象部分与实现部分分离,使它们都可以独立的进行变化使用场景如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用一个类存在两个独立变化的维度,且这两个维度都需要进行扩展例子创建桥接实现接口public interface DrawAPI { public

2021-08-30 09:55:34 101

原创 外观设计模式

外观设计模式模式定义使用场景例子总结模式定义提供一个接口,使得客户端只通过接口访问。隐藏内部子系统的实现使用场景为复杂的模块或子系统提供外界访问的模块子系统相对独立例子Android源码中,Context就是外观模式的一个例子。Context这个抽象类定义了很多我们熟知的方法。它具体的实现都是在ContextImpl.java这个类里边,而ContextImpl实现这些抽象方法时,又通过了ActivityManager、PackageManager一系列的其他子系统public abst

2021-08-29 18:05:36 72

原创 享元设计模式

享元设计模式模式定义使用场景例子总结模式定义运用共享技术有效的支持大量细粒度的对象使用场景系统中有大量对象, 这些对象消耗大量内存对象的状态大部分可以外部化。对象可以按照内蕴状态分为很多组,当把外蕴对象从对象中剔除出来时,每一组对象都可以用一个对象来代替系统不依赖于这些对象身份,这些对象是不可分辨的例子Message.obtain private static int sPoolSize = 0; Message next; private static f

2021-08-29 18:02:27 91

原创 适配器模式

适配器模式模式定义例子总结模式定义将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作例子列表的adapter适配器总结优点:把接口和类结合,通过适配器可以让接口定义的功能更好的复用扩展性好,不光可调用自己开发的功能,还自然的扩展了接口定义的其它功能缺点:不易滥用...

2021-08-29 17:54:11 84

原创 组合实体模式

组合实体模式模式定义例子总结模式定义将部分整体的层次结构转换为树状结构,使得客户访问对象和组合对象具有一致性例子创建依赖对象public class DependentObject1 { private String data; public void setData(String data){ this.data = data; } public String getData(){ return data; }}pu

2021-08-29 17:49:06 85

原创 代理设计模式

代理模式模式定义使用场景例子总结模式定义为其他对象提供一种代理以控制这个对象的访问使用场景按职责来划分,通常有以下使用场景: 1、远程代理。 2、虚拟代理。 3、Copy-on-Write 代理。 4、保护(Protect or Access)代理。 5、Cache代理。 6、防火墙(Firewall)代理。 7、同步化(Synchronization)代理。 8、智能引用(Smart Reference)代理。注意事项: 1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能

2021-08-29 17:41:36 58

原创 中介者设计模式

中介者设计模式模式定义使用场景例子总结模式定义中介者模式将多对多相互作用转化为一对多的相互作用。将对象的协作抽象化使用场景系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类例子定义中介类public class ChatRoom { public static void showMessage(User user, String message){ System.out.pr

2021-08-29 17:26:44 80

原创 访问者设计模式

访问者设计模式模式定义使用场景例子总结模式定义表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下,定义作用于这些元素的新操作使用场景对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义新的操作需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,也不希望在增加新操作时修改这些类。例子定义被访问者学生。抽象了一个学生基类,随机数来模拟总成绩public abstract class Students {

2021-08-29 17:20:54 61

原创 模板方法模式

模板方法模式模式定义使用场景例子总结模式定义定义一个框架,框架中所有方法按顺序执行。使得子类不改变父类结构。有序的执行这些方法使用场景有多个子类共有的方法,且逻辑相同重要的、复杂的方法例子抽象了一个工作的例子public abstract class Work { public Work() { goToWork(); goOffWork(); sleep(); } public abstract void goT

2021-08-29 17:02:35 74

原创 迭代器设计模式

迭代器设计模式模式定义使用场景例子总结模式定义提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示使用场景访问一个聚合对象的内容而无须暴露它的内部表示需要为聚合对象提供多种遍历方式为遍历不同的聚合结构提供一个统一的接口例子抽象迭代器方法public interface Iterator<T> { boolean hasNext(); T next();}实现迭代器public class IteratorImpl<T>

2021-08-29 16:56:23 54

原创 备忘录设计模式

备忘录设计模式模式定义使用场景例子总结模式定义备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象使用场景需要保存/恢复数据的相关状态场景提供一个可回滚的操作例子以mp3播放器为例先创建一个我们要保存的状态集合类,保存歌名,播放模式,播放百分比public class Memoto { String songName; String mode; Float percent;}再创建一个单独管理状态集合类的类,用来保存

2021-08-29 16:48:44 67

原创 Activity 和 生命周期: 创建

activity创建中开始时由activityStack中的realstartActivityLocked函数中调用了activityThread中的scheduleLaunchActicity,然后利用H发送消息调用handleLaunchActivity,由此就开始了创建activity的全过程。创建和生命周期:1.在handleLaunchActivity中调用了performLanuchActivity:tip:其中有一个ActivityClientRecord,这个是activity的一个数

2021-08-26 00:14:25 162

原创 EventBus源码阅读

EventBus源码阅读EventBus.registerEventBus.postEventBus.unregister总结EventBus.register public void register(Object subscriber) { // 首先获得class对象 Class<?> subscriberClass = subscriber.getClass(); // 通过 subscriberMethodFinder 来找到订

2021-08-20 00:16:48 154

原创 观察者设计模式

观察者设计模式模式定义使用场景例子总结模式定义定义一个被观察者和多个观察者,每当被观察者变化,所有观察者都会得到通知使用场景一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度一个对象必须通知其他对象,而并不知道这些对象是谁例子定义观察者public class PersonObserver implements Obs

2021-08-16 20:27:47 57

原创 命令设计模式

命令设计模式模式定义应用场景例子总结模式定义一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令应用场景认为是命令的地方都可以使用命令模式,比如: cmd例子例子:按键左右上下,左右模拟音量加减,上下模拟节目加减。我们先实现电视的左右上下功能public class Television { static final String TAG = Television.cl

2021-08-16 20:00:34 95

原创 责任链模式

责任链模式模式定义应用场景例子总结模式定义一个请求发送到接收者,接收者成连式结构,沿着链式结构传递请求,直到有对象处理请求应用场景有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定在不明确指定接收者的情况下,向多个对象中的一个提交一个请求可动态指定一组对象处理请求例子/** * 抽象类 */public abstract class Handler { /** * 下一代处理者 */ public Handler nextPr

2021-08-16 00:39:45 82

原创 状态设计模式

状态设计模式模式定义使用场景例子总结模式定义依据状态的不同,调用同样的方法却有不同的行为。每一个状态都有一个共同的状态基类,状态模式的目的就是在状态改变的时候,行为也跟着改变。多用于一个对象的行为取决于它的状态,且必须在运行时根据状态改变它的行为。或者一个对象中有大量的操作判断比如if else switch,且依赖于该对象的状态。使用场景行为随状态改变而改变的场景条件、分支语句的代替者例子创建一个接口public interface State { public void do

2021-08-16 00:29:59 83

原创 策略设计模式

策略设计模式模式定义使用场景例子总结模式定义定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换使用场景如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为一个系统需要动态地在几种算法中选择一种例子定义抽象策略角色(Strategy):百货公司所有促销活动的共同接口public abstract class Strategy { public abstract void Show();}定义具体

2021-08-16 00:14:47 69

原创 原型设计模式

原型设计模式模式定义使用场景例子拓展总结模式定义是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。使用场景资源优化场景类初始化需要很多资源性能和安全有要求的场景一个对象多个修改者的场景

2021-08-16 00:00:14 91

原创 Builder设计模式

模式定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示使用静态内部类使用链式调用的方式来设置类的表现形式私有外部类的构造方法,通过静态内部来获取参数进行表现代码实现public class Person { private int ID; private int age; private String name; private int hight; private int weight; private Call

2021-08-15 23:43:21 53

原创 Android源码阅读:setContentView

setContentView源码阅读源码阅读推荐一个地址, 安卓源码,studio没有的源码在这个地址可以查到1 Activity public void setContentView(@LayoutRes int layoutResID) { //调用getWindow的setContentView getWindow().setContentView(layoutResID); initWindowDecorActionBar(); }

2021-08-05 23:28:53 76

原创 Android插件式换肤实现

问题分析换皮功能有两种,一种是白天黑夜模式,一种是多套皮肤的替换,也就是以插件形式实现资源的获取,白天黑夜的模式是通过更换一个主题(Theme),这里不做扩展,而多套皮肤的则是通过获取一个apk的形式去做到,带着几个问题来实现他1.apk怎么存放2.怎么获取apk中资源3.获取之后怎么设置到app中实现换肤4.谷歌怎么实现图片替换解决方案总结...

2021-08-04 23:36:30 252 1

原创 Dijkstra算法

1 问题描述何为Dijkstra算法?Dijkstra算法功能:给出加权连通图中一个顶点,称之为起点,找出起点到其它所有顶点之间的最短距离。Dijkstra算法思想:采用贪心法思想,进行n-1次查找(PS:n为加权连通图的顶点总个数,除去起点,则剩下n-1个顶点),第一次进行查找,找出距离起点最近的一个顶点,标记为已遍历;下一次进行查找时,从未被遍历中的顶点寻找距离起点最近的一个顶点, 标记为已遍历;直到n-1次查找完毕,结束查找,返回最终结果。2 解决方案2.1 使用Dijkstra算法得到最短

2021-08-01 23:28:51 156

原创 Android布局优化:include,merge,viewStub总结

inlucde为了解决重复定义的布局问题,可以多处复用布局用法以及注意点1.一个xml布局文件有多个include标签需要设置ID,才能找到相应子View的控件,否则只能找到第一个include的layout布局,以及该布局的控件2.当include布局设置了id的同时,导入的布局也设置了id,此时应该用导入的布局设置的id,否则会报空指针,通过查看源码知道,导入的布局文件都会调用LayoutInflater的inflate方法,此方法中可以清楚看到一个TAG_INCLUDEDE的标签

2021-08-01 22:33:49 239 1

原创 装饰者设计模式

装饰者设计模式模式定义实现具体应用如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入模式定义装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。实现以去拉面馆吃拉面为例,一碗面做好后都会向

2021-07-26 23:30:05 63

原创 工厂设计模式

工厂模式模式定义简单工厂模式工厂方法模式抽象工厂模式模式定义定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行,主要解决接口选择问题。简单工厂模式public interface IOHandler { void save(String key, String value); String getString(String key);}public class IOHandlerFactory { //多个缓存方式类型

2021-07-25 16:35:11 46

原创 单例设计模式

保证整个程序中只有一个实例1.饿汉式/** * 饿汉式 * 特点:随着类加载已经就已经new了对象 */public class Singleton { private static Singleton mSingleton = new Singleton(); private Singleton() { } public static Singleton getInstance() { return mSingleton;

2021-07-19 23:59:24 37

转载 安卓10大开源框架

(转载自:http://blog.csdn.net/gaomengwang/article/details/54586911)2016 Top 10 Android Library过去的 2016 年,开源社区异常活跃,很多个人与公司争相开源自己的项目,让人眼花缭乱,然而有些项目只是昙花一现,有些项目却持久创造价值,为开发者提供了极大的便利,这些终究由时间来判断。今天,我就来整

2017-10-31 14:16:22 7644 1

原创 算法思想

1.递归算法 递归基本思路就是自己调用自己,详细看下面一例子 一列数的规则如下: 1、1、2、3、5、8、13、21、34 ,求第30位数是多少?(这里用Java实现,其他语言也可以实现此算法,基本思想理解就行) public class Recursivefunction { public static void main(String[] args

2017-10-24 15:32:34 235

原创 安卓SeekBar调节系统亮度与音量

1.调节系统亮度(1)xml布局需要注意的是,返回的亮度值是处于0-255之间的整型数值<SeekBar android:id="@+id/pop_set_seekbar_light" android:layout_height="wrap_content" android:layout_width="1035px" android:max="2

2017-09-08 17:50:20 1506 1

原创 安卓bug的解决

1.应用标题栏无法修改(1)修改父类Acticity,将AppComPatActiviry替换为Activiry,问题解决(2)修改AndroidManiFest.xml文件,将中的Theme属性替换如下:android:theme="@style/Theme.AppCompat.NoActionBar">11(3)更换requestWindowFeatur

2017-06-15 15:23:02 290

转载 关于百度云人脸识别概括

(摘自百度云)人脸检测接口描述检测请求图片中的人脸,返回人脸位置、72个关键点坐标、及人脸相关属性信息。检测响应速度,与图片中人脸数量相关,人脸数量较多时响应时间会有些许延长。典型应用场景:如人脸属性分析,基于人脸关键点的加工分析,人脸营销活动等。五官位置会标记具体坐标;72个关键点坐标也包含具体坐标,但不包含对应位置的详细位置描述。请求

2017-06-08 14:22:46 4789

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除