JAVA设计模式-工厂模式(代码示例)

结构

 

MySort.java   实际业务中我们可能会使用任意一种排序方法 
package pers.zander.edu.arithmetic.sort;
/**
 * 排序接口
 * @author
 * @time 2016-5-10 上午9:55:05
 */
public interface MySort {
    //排序抽象方法,子类自定义实现
    public void insertSort(String name,int array[]);

}

MySortErfenImpl.java  

package pers.zander.edu.arithmetic.sort;
/**
 * 二分法实现排序
 * @author
 * @time 2016-5-10 上午9:55:45
 */
public class MySortErfenImpl implements MySort{

    @Override
    public void insertSort(String name, int[] array) {
        for (int i = 0; i < array.length; i++) {
            int a = array[i];
            int l = 0;
            int r = i-1;
            int m = 0;
            while(l<=r){
                m = (l+r)/2;
                if(a<array[m]){
                    r = m-1;
                }else{
                    l = m+1;
                }
            }
            for (int j = i - 1; j >= l; j--)  {
                array[j+1]=array[j];
            }
            if(l!=i){
                array[l]=a;
            }
        }
    }
    
}

MySortZhijieImpl.java

package pers.zander.edu.arithmetic.sort;
/**
 * 直接法实现排序
 * @author
 * @time 2016-5-10 上午9:56:15
 */
public class MySortZhijieImpl implements MySort{

    @Override
    public void insertSort(String name,int[] array) {
        for (int i = 1; i < array.length; i++) {
            int a = array[i];
            for (int j = 0; j < i; j++) {
                int b = array[j];
                if (a < b) {
                    int c = array[i];
                    array[i] = array[j];
                    array[j] = c;
                }
            }
        }
        
    }


}

 

MySortXierImpl.java

package pers.zander.edu.arithmetic.sort;
/**
 * 希尔法实现排序
 * @author
 * @time 2016-5-10 上午9:56:01
 */
public class MySortXierImpl implements MySort{

    @Override
    public void insertSort(String name, int[] array) {
        int l = array.length;
        int s = 0;
        int m = l/2;
        while (true) {
            m = m-1;
            for (int i = 0; i < array.length-m; i++) {
                s++;
                if(array[i]>array[i+m]){
                    int temp = array[i];
                    array[i]=array[i+m];
                    array[i+m]=temp;
                }
            }
            if(m==1){
                break;
            }
        }
        System.out.println(s);
    }
    
}

SortFactory.java   工厂抽象类

package pers.zander.edu.arithmetic.sort;
/**
 * 排序工厂抽象类
 * @author
 * @time 2016-5-10 上午9:56:28
 */
public abstract class SortFactory implements MySort{

    public abstract MySort createZhijie();
    public abstract MySort createXier();
    public abstract MySort createErfen();
    
    public abstract MySort createSort(String name);
}

SortFactoryImpl.java 工厂实现类 

package pers.zander.edu.arithmetic.sort;

/**
 * 排序工厂实现类
 * @author
 * @time 2016-5-10 上午9:56:43
 */
public class SortFactoryImpl extends SortFactory{

    @Override
    public void insertSort(String name,int[] array) {
        if("zhijie".equals(name)){
             new MySortZhijieImpl().insertSort("",array);
        }else if("erfen".equals(name)){
             new MySortErfenImpl().insertSort("",array);
        }else if("xier".equals(name)){
             new MySortXierImpl().insertSort("",array);
        }else if("maopao".equals(name)){
             new MySortMaopaoImpl().insertSort("",array);
        }
    }
    @Override
    public MySort createSort(String name) {
        if("zhijie".equals(name)){
            return new MySortZhijieImpl();
        }else if("erfen".equals(name)){
            return new MySortErfenImpl();
        }else if("xier".equals(name)){
            return new MySortXierImpl();
        }else{
            return null;
        }
    }
    
    @Override
    public MySortZhijieImpl createZhijie() {
        // TODO Auto-generated method stub
        return new MySortZhijieImpl();
    }

    @Override
    public MySortXierImpl createXier() {
        // TODO Auto-generated method stub
        return new MySortXierImpl();
    }

    @Override
    public MySortErfenImpl createErfen() {
        // TODO Auto-generated method stub
        return new MySortErfenImpl();
    }
}

TestFactorySort.java

package pers.zander.edu.arithmetic.sort;
/**
 * 测试类
 * @author
 * @time 2016-5-10 上午9:58:08
 */
public class TestFactorySort {

    public static void main(String[] args) {
        SortFactory sf = new SortFactoryImpl();
        int array[]={3,5,2,78,55,45,36,47,89,54,16,77,0,89};
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+",");
        }
        System.out.println("");
        //1-在这里判断需要用哪个排序方法
//        sf.createXier().insertSort("",array);
        //2
//        MySortZhijieImpl ms = (MySortZhijieImpl) sf.createSort("zhijie");
//        if(ms!=null){
//            ms.insertSort("",array);
//        }
        //3-推荐 代码简洁
        sf.insertSort("maopao", array);
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+",");
        }
    }
}

 

欢迎各位大神来指教。。。

posted @ 2016-05-24 15:28  zblogs  阅读(438)  评论(0编辑  收藏  举报