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();
}
}
网友评论