美文网首页
设计模式

设计模式

作者: 辰若寒 | 来源:发表于2017-11-29 20:07 被阅读2次

    1、java接口、抽象类的好处

    依赖倒置原则:

         A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。

        B.抽象不应该依赖于具体实现,具体实现应该依赖于抽象。

    抽象是稳定的,实现的变化不会影响到抽象的调用,因为调用的是抽象的方法,所以修改实现时候不需要修改调用的语句。

    举个例子:两数相加的例子,相加的数据来源于读取文件的类,这样做并不是很好,因为如果我的数据不是文件里的了,而是在数据库里,这样的话,为了不影响你现有的代码,你就只能将你的Reader类整个改头换面。

    或者还有一种方式就是,你再添加一个DBReader类,然后把你所有使用Reader读取的地方,全部手动替换成DBReader,这样其实也还可以接受,那假设我有的从文件读取,有的从数据库读取,有的从XML文件读取,有的从网络中读取,有的从标准的键盘输入读取等等。

    这时候就需要抽象接口来实现了?

    所以我们最好的做法就是抽象出一个抽象类或者是接口,来表述数据读取的行为,然后让上面所有的读取方式所实现的类都实现这个接口,而我们的客户端,只使用我们定义好的接口,当我们的实现变化时,我只需要设置不同的实际类型就可以了,这样对于系统的扩展性是一个大大的提升。

    针对上面简单的数据读取,我们可以定义如下接口去描述。

    public interface Reader{                                                                                                 public int getA();                                                                                                                   public int getB();                                                                                                             }

    而当使用不同的方法去读取数据的时候,我们就可以写出DBReader、FileReader、XMLReader、NetReader 让我们原来的Reader改名为FileReader去实现这个接口,这样计算器就依赖于抽象的接口,这个依赖是非常稳定的,因为不论你以后要从哪读取数据,你的两个获取数据的方法永远都不会变。

    这样,我们让DBReader,XMLReader,NETReader,StandardOutPutStreamReader等等,都可以实现Reader这个接口,而我们的客户端调用依赖于一个Reader,这样不管数据是从哪来的,我们都可以应对自如,因为我根本不关心你是什么Reader,我只知道你能让我获得A和B这两个值就行了。

    这便是我们依赖于抽象所得到的灵活性,这也是JAVA语言的动态特性给我们带来的便利

    2、双重校验锁的懒汉模式

    public class Singleton {  

        private static volatile Singleton instance = null;  

        private Singleton(){}  

        public static Singleton getInstance() {  

            if (instance == null) {  

                synchronized (Singleton.class) {  

                    if (instance == null) {  

                        instance =new Singleton();  

                    }  

                }  

            }  

            return instance;  

        }  

    }  

    相关文章

      网友评论

          本文标题:设计模式

          本文链接:https://www.haomeiwen.com/subject/kmvpbxtx.html