java 设计模式

简单工厂:

   首先先理解一下什么是“面向接口编程”,接口的作用。

   接口:一种特殊的抽象类,里面只有方法的定义,没有具体的实现。定义的方法由具体的继承类实现,实现类也可以根据自身添加其他功能。

   作用:接口用来定义实现类的外观,相当于一个契约,规定这个类该实现什么功能。具体如何实现不管。通过接口,可以实现不相关类的相同接口。

   思想:就是“封装隔离”,通常提到的封装是指对数据的封装,而这里是指对方法的封装。隔离指的是外部调用者只能调用接口,但是不知道具体的实现类是什么。由于外部调用和内部实现被接口隔离开了,那么只要接口不变,内部实现的变化就不会影响到外部应用,从而使得系统更灵活,具有更好的扩展性和可维护性,这也就是所谓“接口是系统可插拔性的保证”这句话的意思。

   比方说

(1)接口

    public interface api()

  {

     public void test();

  }

(2)继承实现类

   public class apiClass implements api

{

     public void test(){。。。。}

}

(3)客户端调用

public class client{

  api ap=new apiClass();

}

这样调用接口。但是这样存在一个问题就是,接口就是为了实现封装隔离,但是这样导致客户端调用的时候知道了具体的实现类,这样是不符合设计理念的,所以我们采取简单工厂模式

简单工厂:其实就是再定义一个类名字叫Factory,在这个Factory类里面创建接口,然后返回,客户端通过调用Factory类来创建相应的接口。这样就不知道具体的实现类是什么。

Public void Factory()

{

   public static api CreateApi()

{

   api ap=new apiClass();

   return api;

}

}

在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。

堆内存用于存放由new创建的对象和数组。 在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或 者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对 象,引用变量相当于为数组或者对象起的一个别名,或者代号。

引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放。而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放,数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因,实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针!

 

http://yjph83.iteye.com/blog/2107101

 

原文地址:https://www.cnblogs.com/GuoJiaSheng/p/3875881.html