JAVA适配器模式

适配器模式(Adapter Pattern):把类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法再一起工作的两个类一起工作。

适配器模式的两种形式:

  1. 类的适配器模式:把被适配的类的API转换成目标类的API;该模式涉及的角色:

    • 目标(Target)角色:这就是所期待得到的接口;注意,这里讨论的是类的适配器模式,因此目标不可以是类。

      /**
       * @author effine
       * @date 2014年4月7日   下午11:44:58
       */
      
      package org.effine.adapter;
      
      /* 目标角色 */
      public interface Target {
      
          /**
           * 这是源类(客户端类)也有的方法method1()
           */
          void method1();
      
          /**
           * 这是源类(客户端类)没有的方法method2()
           */
          void method2();
      }
      

阅读全文

JAVA简单工厂模式

简单工厂模式 SimpleFactory,又称 静态工厂方法模式(StaticFactory Method);

  • 优点:工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。

  • 缺点:由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;这些缺点在工厂方法模式中得到了一定的克服。

阅读全文

JAVA单例模式

Java 的单例模式,即保证在Java应用程序中,一个Java类只有一个实例存在;单例模式可分为饿汉式、懒汉式及登记式(不常用,只做了解即可);常用的场景:读取配置文件类、工具类、线程池、缓存、日志对象等。

饿汉式

/** 
 * @author effine 
 * @date 2013-9-9  下午11:23:42
 */  
package cn.effine.singleton;  
/* 单例模式:饿汉式 */  
public class HungrySingleton {  
    /* 饿汉式单例模式, 声明的同时初始化对象 */  
    private static HungrySingleton hungry = new HungrySingleton();  
    /* 构造方法设置成privae,不允许外部实实例化 */  
    private HungrySingleton() {  
    }  
    /* 返回一个单态模式的类的实例 */  
    public static final HungrySingleton getInstance() {  
        return hungry;  
    }  
}  

单例之饿汉式:对象预先加载,线程安全;在类创建的同时生成单例对象,调用时获得对象实例的方法反应速度快,代码简练。

阅读全文

JAVA观察者模式

Java观察者模式(Observer Pattern),简单说观察者模式包含四种角色:抽象被观察者角色、具体被观察者角色、抽象观察者角色和具体观察者角色;

针对观察者与被观察者设定场景:每天我们关心的天气预报统一由中国气象局发布(被观察者),每个发布气象平台(观察者)订阅中国气象局;天气发生变化气象局发布通知给各个平台,然后平台做相应的更新操作。当然,现实中该场景是不存在的,权宜是为了加深理解Java观察者模式而生,因为气象局是不会去通知各个订阅平台,更新操作是各个平台定时刷新完成。

其中Java本身提供观察者模式的接口供开发者使用,在 java.util包下,包含接口Observer及类Observable,接口Observer是扮演抽象观察者角色,包含一个update()方法,而类Observable则扮演抽象被观察者角色,开发者只需要继承该类就能很好的运用观察者模式。闲话少说,贴出代码以供参考:

抽象被观察者角色

/** 
 * @author effine 
 * @date 2013年10月4日  下午11:02:21 
 */  
package cn.effine.observer;  
/* 抽象被观察者角色 */  
public interface IWitched {  
    /* 添加观察者 */  
    public void addWitcher(IWitchers w);  
    /* 删除观察者 */  
    public void deleteWitcher(IWitchers w);  
    /* 被观察者 发生变化,通知观察者 */  
    public void notifyWitcher(Object o);  
}

阅读全文