如果从事JAVA相关的开发,都不可避免的要用到抽象和封装,这是JAVA的一个特点,同时也是每个开发者必须掌握的,JAVA是这样,Android更是如此。而设计模式就是告诉我们应该如何写出高效且更具应用性和拓展性的代码,最近也是学习了几类比较常用的设计模式,下面一一列举出来,虽然说的不细,但是应该知道的我会做个总结。

#####单例设计模式#####

单例设计模式的一般定义:一个类中只允许有一个实例。

实现思路:让类的构造方法私有化,同时提供一个静态方法去实例化这个类。

代码 :

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;
}

这是一个较为标准的单例模式,为了安全我给他加了锁,然而这样写并不是最好的写法。单例模式有两种写法,懒汉写法和饿汉写法。

懒汉式:在静态方法中初始化。时间换空间。(不推荐,时间很重要)

饿汉式:在声明对象就初始化。空间换时间。(推荐,空间不是问题)

所以,在实际开发中用的更多的是饿汉写法,可以对这个类加锁,在变量声明的时候就初始化。具体如何实现这里我就不介绍了,可以自己去实现。

#####简单工厂设计模式#####

简单工厂设计模式的一般定义:简单工厂又叫静态工厂,由一个工厂对象决定创建哪一个产品对象。

实现思路:写一个类,让他制造出我们想要的对象。

代码:

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 () {
..........
} }
优点
    * 使用模版方法模式,在定义算法骨架的同时,可以很灵活的实现具体的算法,满足用户灵活多变的需求
缺点
    * 如果算法骨架有修改的话,则需要修改抽象类

好了,就先介绍那么多,以后我会慢慢补充,希望这篇博文对你有所帮助。

Java中的几种设计模式的更多相关文章

  1. [设计模式](转)Java中的24种设计模式与7大原则

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  2. JAVA中的23种设计模式

    http://blog.csdn.net/chmask/article/details/2631485 http://www.cnblogs.com/hnrainll/archive/2011/12/ ...

  3. 浅析Java中的23种设计模式

    前言 设计模式不论是在我们学习编程,还是在工作和面试过程中,都会涉及到的一个问题,所以了解和学习好设计模式,是我们每一位码农必须要具备的技能,对以后的发展和自己技能的提升都有好处. 什么是设计模式(D ...

  4. Java中的24种设计模式与7大原则

    一.创建型模式 1.抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类.2.生成器模式(Builder patter ...

  5. Java中的24种设计模式与7大原则 (转)

    一.创建型模式 1.抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类.2.生成器模式(Builder patter ...

  6. Java中的23种设计模式与7大原则

    一.创建型模式 1.抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类.2.生成器模式(Builder patter ...

  7. [ 转载 ] Java开发中的23种设计模式详解(转)

    Java开发中的23种设计模式详解(转)   设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类 ...

  8. java中的几种架构对象(PO,VO,DAO,BO,POJO)

    java中的几种对象(PO,VO,DAO,BO,POJO)   一.PO :(persistant object ),持久对象 可以看成是与数据库中的表相映射的java对象.使用Hibernate来生 ...

  9. JAVA基础学习之throws和throw的区别、Java中的四种权限、多线程的使用等(2)

    1.throws和throw的区别 throws使用在函数外,是编译时的异常,throw使用在函数内,是运行时的异常 使用方法 public int method(int[] arr) throws ...

随机推荐

  1. iOS开发之 - 键盘处理神器 IQKeyboardManager

    平常在开发中,用到输入框的地方不胜其数,当输入框位于屏幕底部时,弹起的键盘很可能覆盖输入框,导致用户看不到输入结果,体验较差...... IQKeyboardManager 可以很简单快捷的解决键盘遮 ...

  2. A标签/按钮防止重复提交&页面Loading制作

    [实现原理] 防止重复提交与页面的提交时的Loading设置,均是在提交,但是尚未处理完成进行的操作,且提交为异步提交(同步提交不需要考虑).因此,其实现原理是在点击按钮或A标签时,将按钮/A标签置为 ...

  3. timer Compliant Controller project (3)--bom and sch

    After optimization of structural solution , I  must prepare the bom and  drawing circuit diagram as ...

  4. WebGL编程指南案例解析之绘制三个点

    //案例2.绘制3个点,将顶点数据存到缓冲区对象(gl.ARRAY_BUFFER)中,然后顶点着色器从里面读数据(3个顶点) //着色器将对这些顶点进行逐个解析, //第一个顶点给到顶点着色器,赋值给 ...

  5. TF随笔-12

    #!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Tue Aug 1 08:14:30 2017 ...

  6. Luogu2435 染色【状压qwq】【轮廓线DP】

    LINK 题目大意 有一个 n 行 m 列的格点图,你需要给每个点上染上 k 种颜色中的一种,要求没有两个相邻点颜色相同.给定第一行与最后一行的染色,试求总染色方案数. 思路 暴力预处理状态暴力转移可 ...

  7. 7-13 求链式线性表的倒数第K项(20 分)

    给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字. 输入格式: 输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理). 输出格式 ...

  8. MySQL-with rollup函数运用

    如果想在下面这个表下面添加一行 总计 数据行SQL代码怎么实现 并且根据9月金额进行城市降序 总计置于底部呢 MySQL提供了 group by with rollup 函数进行group by 字段 ...

  9. TCP滑动窗口与回退N针协议

    [转]TCP 滑动窗口协议/1比特滑动窗口协议/后退n协议/选择重传协议 2014-1-5阅读884 评论0 本文转自 http://www.cnblogs.com/ulihj/archive/201 ...

  10. Oracle基本操作命令

    一.Oracle监听命令 1.启动监听 lsnrctl start 五.Oracle 查看表空间的大小及使用情况sql语句 --1.查看表空间的名称及大小 SELECT t.tablespace_na ...