2019-02-22 接口与工厂设计模式

package com.ghw.springboot.A0222;

/**
 * 接口与工厂
 */
interface Service {
    /**
     * 方法1
     */
    void method1();

    /**
     * 方法2
     */
    void method2();
}

interface ServiceFactory {
    Service getService();
}

class Service1Impl implements Service {

    @Override
    public void method1() {
        System.out.println("实现1,方法1");
    }

    @Override
    public void method2() {
        System.out.println("实现1,方法2");
    }
}

class Service2Impl implements Service {

    @Override
    public void method1() {
        System.out.println("实现2,方法1");
    }

    @Override
    public void method2() {
        System.out.println("实现2,方法2");
    }
}

/**
 * 采用匿名内部类实现工厂模式,没有必要去创建工厂具名类,代码简洁,方便。
 */
class Service3Impl implements Service {

    static final ServiceFactory FACTORY = new ServiceFactory() {
        @Override
        public Service getService() {
            return new Service3Impl();
        }
    };

    @Override
    public void method1() {
        System.out.println("实现3,方法1");
    }

    @Override
    public void method2() {
        System.out.println("实现3,方法2");
    }
}

class Factory1Impl implements ServiceFactory {

    @Override
    public Service getService() {
        return new Service1Impl();
    }
}

class Factory2Impl implements ServiceFactory {

    @Override
    public Service getService() {
        return new Service2Impl();
    }
}

/**
 * @author hongwei.gao
 */
public class Factories {

    private static void serviceConsumer(ServiceFactory factory) {
        Service service = factory.getService();
        service(service);
    }

    public static void main(String[] args) {
        /*
          采用工厂模式,代码与接口的实现完全分离
         */
        serviceConsumer(new Factory1Impl());
        serviceConsumer(new Factory2Impl());
        serviceConsumer(Service3Impl.FACTORY);

        /*
          不用工厂模式,必须指定代码的实现类型
         */
        service(new Service1Impl());
        service(new Service2Impl());
    }

    private static void service(Service service) {
        service.method1();
        service.method2();
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容