常用设计模式有工厂模式、道理模式以及生产者消费者模式
单例模式
使用静态内部类的方式可以保证线程安全,并且比同步方法的性能好。
package com.qqyumidi;
public class SingleTon {
// 利用静态内部类特性实现外部类的单例
private static class SingleTonBuilder {
private static SingleTon singleTon = new SingleTon();
}
// 私有化构造函数
private SingleTon() {
}
public static SingleTon getInstance() {
return SingleTonBuilder.singleTon;
}
public static void main(String[] args) {
SingleTon instance = getInstance();
}
}
工厂模式
实现结构:1、抽象类;2、实现类;3、工厂类;4、客户端。客户端通过工厂类获取实现对象,由客户端调用实现对象返回结果。
定义一个接口
/**
* This is factory patter package
*/
package com.roc.factory;
/**
* 产品的抽象接口 人类
* @author liaowp
*
*/
public interface Human {
public void say();
}
定义两个产品
/**
* This is factory patter package
*/
package com.roc.factory;
/**
* man 男人
* @author liaowp
*
*/
public class Man implements Human {
/* say method
* @see com.roc.factory.Human#say()
*/
@Override
public void say() {
System.out.println("男人");
}
}
/**
* This is factory patter package
*/
package com.roc.factory;
/**女人
* @author liaowp
*
*/
public class Woman implements Human {
/* say method
* @see com.roc.factory.Human#say()
*/
@Override
public void say() {
System.out.println("女人");
}
}
创建一个工厂类
package com.roc.factory;
/**
* 简单工厂放射实现
* @author liaowp
*
*/
public class SampleFactory1 {
public static Human makeHuman(Class c){
Human human = null;
try {
human = (Human) Class.forName(c.getName()).newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
System.out.println("不支持抽象类或接口");
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("没有足够权限,即不能访问私有对象");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("类不存在");
e.printStackTrace();
}
return human;
}
}
策略模式
实现结构:1、抽象类;2、实现类;3、策略类;4、客户端。由客户端创建实现对象,将实现对象传给策略对象,由策略对象调用实现对象返回结果。
策略模式与简单工厂模式很相似。它们区别是工厂模式传给工厂类的是参数,客户端负责调用实现对象。而策略模式传给策略类的是对象,由策略对象负责调用实现对象。