공장 모드 & 단일 모드

3036 단어
핵심 코드: (단순 공장)
package com.factory;/*
 *@author:
 *@time
 */

import com.entity.Aodi;
import com.entity.Byd;
import com.entity.Car;

public class CarFactory {
    public Car getCar(String type){
        if("  ".equals(type)){
            return Aodi.getInstance();
        }
        else if("   ".equals(type)){
            return Byd.getInstance();
        }
        else
            return null;
    }
}

실례를 만드는 일을 공장에 맡기고 고객이 직접 실례를 접하지 않으며 고객은 차를 어떻게 만드는지 필요로 하지 않는다. 공장에 특정한 차에 대한 수요(상기 코드에서 getCar() 방법을 통해 차에 대한 수요를 전달하는 것)를 제시하고 구체적인 창설은 공장이 스스로 완성한다.다음과 같습니다.
public static void main(String[] args) {
        Car car=new CarFactory().getCar("   ");
        car.run();
    }

방법 공장 모델;


    /**
     *       ,       ,        
     */

    public static void test2(){
        Car car1=new BydFactory().getCar();
        Car car2=new BaomaFactory().getCar();
        Car car3=new AodiFactory().getCar();
        car1.run();
        car2.run();
        car3.run();
    }

    //                     ,             ,        
    import com.entity.Aodi;
    import com.entity.Car;

    public class AodiFactory {

        public Car getCar(){
            return Aodi.getInstance();
        }
    }

솔리드(단일 예제 모드):
아사자식:
package com.entity;/*
 *@author:
 *@time
 */

public class Baoma implements Car{

    private Baoma(){}

    /**
     *        
     */
    private static final Baoma instance=new Baoma();;
    
    public static Baoma getInstance(){
        return instance;
    }

    @Override
    public void run() {
        System.out.println("     !");
    }

    @Override
    public void stop() {
        System.out.println("     !");
    }
}

이중 검사 실현
package com.entity;/*
 *@author:
 *@time
 */

public class Aodi implements Car{
    /**
     *           
    */
    private static volatile Aodi instance;
    private Aodi(){}
    public static Aodi getInstance(){
        if(instance==null){
            synchronized (Aodi.class){
                if(instance==null){
                    instance=new Aodi();
                    return instance;
                }
            }
        }
        return instance;
    }
    @Override
    public void run() {
        System.out.println("     !");
    }

    @Override
    public void stop() {
        System.out.println("     !");

    }
}

정적 내부 클래스 구현:
package com.entity;/*
 *@author:
 *@time
 */

public class Byd implements Car {

    /**
     *            
     */
    private static class bydClass{
        private static Byd byd=new Byd();
    }


    public static Byd getInstance(){

        return bydClass.byd;
    }
    private Byd(){}
    @Override
    public void run() {
        System.out.println("      !");
    }

    @Override
    public void stop() {
        System.out.println("      !");

    }
}

좋은 웹페이지 즐겨찾기