原创

java中的设计模式

设计模式的分类

总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
下面就简单介绍几个常用的设计模式
单例模式(singleton) 
单例就是该类只能返回一个实例。
单例所具备的特点:
1.私有化的构造函数
2.私有的静态的全局变量
3.公有的静态的方法
单例分为懒汉式、饿汉式和双重判定锁
其中:spring mvc 是单例
饿汉式:

public class Singleton1 {
private Singleton1() {};
private static Singleton1 single = new Singleton1();
public static Singleton1 getInstance() {
return single;
}
}

懒汉式:

public class Singleton2 {
private Singleton2() {}
private static Singleton2 single=null;
public tatic Singleton2 getInstance() {
if (single == null) {
single = new Singleton2();
}
return single;
}
}

代理设计模式
接口:

public interface BrandService {
public List<Brand> getBrandList();
}

接口的真实实现:

public class BrandServiceImpl implements  BrandService {
public List<Brand> getBrandList() {
brandDao.getBrandList();
}
}

接口的代理实现:

public class BrandServiceProxy implements  BrandService {
private BrandService brandService;
public BrandServiceProxy(BrandService brandService) {
this.brandService = brandService;
}
public List<Brand> getBrandList() {
if (cache中不存在) {
List<Brand> brandList = brandService.getBrandList();
cache.put("brandList", brandList);
}
return brandList;
}
}

客户端调用:

public class client {
public static void main(String[] args) {
BrandService brandService = new BrandServiceProxy(new BrandServiceImpl());
brandService.getBrandList();
}
}


工厂设计模式
接口:

public interface DataSource {
public Connection getConnection();
}

mysql数据源实现类:

public class MysqlDataSource implements  DataSource{
public Connection getConnection() {
return mysql数据库的连接
}
}

数据源工厂:

public class DataSourceFactory {
public static DataSource getDataSource(String dbType) {
if (dbType.equals("mySql")) {
return new MysqlDataSource();
} else if (dbType.equals("oracle")) {
return new OracleDataSource();
} else {
throw new RuntimeException("数据源类型不匹配");
}
}
}

客户端测试类:

public class Client() {
public static void main(String[] args) {
DataSourceFactory.getDataSource("mySql").getConnection();
}
}

Spring 是完全面向接口的设计

正文到此结束