设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
使用设计模式的好处:代码的可重用性、可扩展性,可阅读性,保证代码的可靠。(代码要优雅)
关于相关源码可以在GitHub上下载:
https://github.com/rickey17/design
适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。
类的适配器模式
核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口是Targetable,通过Adapter类,将Source的功能扩展到Targetable里
存在问题:对于原来的功能,需要提供新的接口。
违背原则:开闭原则
解决方案:新增适配器类以及接口,客户端调用接口
源码:
public class Source {
public void method1(){
}
}
public interface Targetable {
public void method1();
public void method2();
}
public class Adapter extends Source implements Targetable {
public void method1(){
}
public void method2(){
}
}
public class Client {
/**
*
* @param args
*/
public static void main(String[] args){
}
}
对象的适配器模式
不同的是将Source的实例对象作为,Adapter的成员变量
同类的适配器原因
源码(只有Adapter有区别,也就是代理实现的方式有区别)
public class AdapterForObj implements Targetable {
public Source m_Source;
public void method1(){
}
public void method2(){
}
}
接口的适配器模式
存在问题:接口定义的方法多了,类都需要实现就麻烦了。
违背原则:接口隔离原则
解决方案:定义抽象类实现接口,客户端调用抽象类
源码:
public abstract class AdapterForInter implements Targetable {
public void method1(){
}
public void method2(){
}
}
public class Source1 extends AdapterForInter {
public void method1(){
}
}
public class Source2 extends AdapterForInter {
public void method2(){
}
}
装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。
存在问题:给一个对象增加一些新的功能
违背原则:开闭原则
解决方案:提供一个装饰类
源码:
public interface ISource {
public void method();
}
public class Source implements ISource {
public void method(){
}
}
public class Decorator implements ISource {
public Source m_Source;
public void method(){
}
}
public class Client {
/**
*
* @param args
*/
public static void main(String[] args){
}
}
实现与对象的适配模式类似,但两者的场景完全不同
代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做。
原因和装饰一样,实现也是类似。
但是装饰为了修改功能
代理则是为了控制权限,原有的类是对客户端透明的。
源码:
public class Proxy implements ISource {
public Source m_Source;
public void doAfter(){
}
public void doBefore(){
}
public void method(){
}
}
外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度。
这个理解比较简单,不贴源码了。
桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了。
源码:
public interface Driver {
public void method();
}
public class MysqlDriver implements Driver {
public void method(){
}
}
public class OracleDriver implements Driver {
public void method(){
}
}
public class Db2Driver implements Driver {
public void method(){
}
}
public class Bridge {
public Driver m_Driver;
public void method(){
}
}
又叫部分-整体模式在处理类似树形结构的问题时比较方便
源码:
public class TreeNode {
private String name;
private TreeNode parent;
public Vector m_TreeNode;
/**
*
* @param treeNode
*/
public void add(TreeNode treeNode){
}
public TreeNode remove(){
return null;
}
}
享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。
源码:
public class ConnectionPool {
public Vector m_Connection;
public Connection getConnection(){
return null;
}
/**
*
* @param connection
*/
public void release(Connection connection){
}
}
剩下的行为型的设计模式留待下一篇在讲咯
欲知后事如何,请听下回分解…