黑马程序员--JAVA中23种设计模式(-…

来源:互联网 发布:艾科网络 编辑:程序博客网 时间:2024/06/05 05:01

--------android培训java培训期待与您交流------

1 单例设计模式

单实例设计模式,这个模式想必大家很了解,一般分为懒汉式好饿汉式,懒汉式不会出现线程安全问题,而饿汉式容易出现线程安全问题,今天我给大家采用jdk1.5并发库中的ReadWriteLock来实现一下单例设计模式;

import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class SingletonsByRWL {
      private static ReadWriteLock rwl = newReentrantReadWriteLock();
      private static SingletonsByRWL instance = null;

      private SingletonsByRWL() {
        };

      public static SingletonsByRWL getInstance();

  rwl.readLock().lock();
  try {
   if (instance== null) {
    rwl.readLock().unlock();
    rwl.writeLock().lock();
    try{
     instance= new SingletonsByRWL();
    }finally {
     rwl.writeLock().unlock();
    }
    rwl.readLock().lock();
   }
   returninstance;
  } finally {
   rwl.readLock().unlock();
  }
 }

2:工厂设计模式

在工厂中,生产一般都有原料和图纸,技术工照着图纸的意思,将原料加工成产品;或者说我们需要大量使用的东西一般都是批量生产的,这就要有个专门的工厂去生产他,java中我们开发三层架构,很重要的一个软件工程的思想就是解耦,而解耦的一个实现方式就是工厂设计模式,我们将配置文件配好,定义好一些接口的实现类,配置到配置文件中去,我们需要对配置文件进行解析,同时往往要用到反射技术,动态创建对象并返回需要使用的人;这时工厂设计模式的高级应用;这也是Spring等框架的底层实现原理;

3:策略设计模式

 对于我们一个类中或者多个类中出现的重复代码,这些代码基本过程和思想一样,只是具体的实现细节稍微有些不同,这个时候我们考虑到,将这些重复代码或者说共性代码进行提取封装,成为一个父类,而对于不同的具体细节,我们定义成一个接口,由子类取实现,即将不同的细节定义在接口中,不同子类使用时只要传递该接口的子类,实现其抽象方法即可。这样我们就把这些细节封装进一个对象中去了,由于我们往往会使用匿名内部类的方式实现将接口的子类传入,就将代码封装进一个对象中,这样更面向对象一点;比如说操作数据库,不同的细节是sql语句和对结果集的处理方式不同,我们可以将这些定义在一个接口中,然后使用时传递一个匿名内部类对象进去。相比于模板方法设计模式而言,他更体现了面向对象的封装性;

模板方法设计模式

我们在定义一些功能时,发现有很多重复的代码,这些方法的实现过程和思想是差不多的,只是参数和一些细节不同罢了,这个时候我们队这些方法所属的类进行抽象,将共性代码定义到父类中,一些细节性的代码留给子类取实现,比如说我们在操作数据库是,都需要有sql语句和链接数据库和关闭数据库,这个时候我们将这些代码提取到父类中取,对于一些细节,比如sql语句,还有是查询还是增删,定义成抽象方法,由子类取实现;

5装饰设计模式

所谓装饰设计模式就是说使用原有对象功能,并对其进行增强,他是通过组合方式来实现的,比如说,我们要定义一个List集合,但是要保证期元素的唯一性,这时我们就要定义一个list对象,并调用其方法完成集合的增删改查,但是在增加的时候,我们加入了判断元素唯一性的条件,从而完成了该功能,但这个功能却不是java提供的list集合就能完成的,等于是我们自己创建了另一个类,使用List的功能;

这有点代理的意思,但是代理是用反射机制实现的;

 
0 0
原创粉丝点击