若是从事JAVA相关的开发,都不可避免的要用到抽象和封装,这是JAVA的一个特色,同时也是每一个开发者必须掌握的,JAVA是这样,Android更是如此。而设计模式就是告诉咱们应该如何写出高效且更具应用性和拓展性的代码,最近也是学习了几类比较经常使用的设计模式,下面一一列举出来,虽说的不细,可是应该知道的我会作个总结。算法
#####单例设计模式#####设计模式
单例设计模式的通常定义:一个类中只容许有一个实例。安全
实现思路:让类的构造方法私有化,同时提供一个静态方法去实例化这个类。ide
代码 :学习
static class SingleTon { private static SingleTon instance; private SingleTon(){}; public static SingleTon newInstance() { if(instance==null) { synchronized (SingleTon.class) { if(instance==null) { ins和tance=new SingleTon(); } } } return instance; }
这是一个较为标准的单例模式,为了安全我给他加了锁,然而这样写并非最好的写法。单例模式有两种写法,懒汉写法和饿汉写法。spa
懒汉式:在静态方法中初始化。时间换空间。(不推荐,时间很重要)设计
饿汉式:在声明对象就初始化。空间换时间。(推荐,空间不是问题)code
因此,在实际开发中用的更多的是饿汉写法,能够对这个类加锁,在变量声明的时候就初始化。具体如何实现这里我就不介绍了,能够本身去实现。对象
#####简单工厂设计模式#####blog
简单工厂设计模式的通常定义:简单工厂又叫静态工厂,由一个工厂对象决定建立哪个产品对象。
实现思路:写一个类,让他制造出咱们想要的对象。
代码:
public class 学生工厂 { public static 学生 getStudent(int type) { switch (type) { case 学生类型.学神: return new 学神(); case 学生类型.学霸: return new 学霸(); case 学生类型.学弱: return new 学弱(); case 学生类型.学渣: return new 学渣(); default: break; } return null; } }
经过这个工厂,咱们能够很方便的生产出咱们想要的对象。这里我用伪代码表示,为了更加形象,实际中这样的写法是绝对不容许的!
#####适配器设计模式#####
适配器模式的通常定义:某类继承这个适配器,从而实现咱们须要实现的方法。
实现思路:经过写一个适配器类,里面写了全部的抽象方法,可是这些方法是空的,而且适配器类要定义成抽象的,若是适配器类能够本身实现就没有意义了。适配器的做用,继承适配器,从新须要从新的方法就能够了,简化操做。
代码:
public class Adapter { public static void main(String[] args) { 阿乐 a=new 阿乐(); a.啪啪啪(); } interface 谈恋爱 { void 吃饭(); void 看电影(); void 逛街(); void 啪啪啪(); } abstract class 恋爱中的妹子 implements 谈恋爱{ @Override public void 吃饭() { // TODO Auto-generated method stub } @Override public void 看电影() { // TODO Auto-generated method stub } @Override public void 逛街() { // TODO Auto-generated method stub } @Override public void 啪啪啪() { // TODO Auto-generated method stub } } class 阿乐 extends 恋爱中的妹子{ public void 啪啪啪() { // TODO Auto-generated method stub System.out.println("阿乐:亚美爹,好害羞"); } } }
这里我写了一个接口,接口中定义了几个方法,当某类实现这个接口的时候就须要实现这些方法。用时适配器不容许本身实现这些方法,须要交给他的子类去继承,让子类选择须要实现什么代码,Android中的Adapter就是用了适配器模式。
#####模板设计模式#####
模板设计模式的通常定义:定义一个算法骨架将具体实现交给子类去实现。
实现方法:在类中定义一个抽象方法,距离实现交由子类去实现
代码:
public class A { public final void run { ........ void howRun(); ........ } public abstract void howRun(); } public class B extends A { public void howRun () { .......... } }
好了,就先介绍那么多,之后我会慢慢补充,但愿这篇博文对你有所帮助。