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();
}
}
2019-02-22 接口与工厂设计模式
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 工厂模式与抽象工厂模式主要解决接口选择问题。 一、工厂模式 当明确计划需要在不同条件下创建不同实例时,可以使用工厂...
- 声明:原创文章,转载请注明出处。https://www.jianshu.com/p/39609c79c646 设计...
- 一、接口的结构: 抽象方法 全局常量 最终写法: 其他内部结构内部类内部抽象类内部接口 二、接口和抽象类 抽象类可...