// ====================弊端================
- 码结构:分两层:顶层IContext,底层Service。
- 结构优势:顶层上下文IContext为各Service之间提供通信功能,各个Service以自身业务为边界。
- 代码缺点:创建对象需要大量重复代码,顶层需要维护各底层的对象创建
// ========================================
void main() {
Global global = new Global();
//入口
global.getService1();
global.getService2();
global.getService3();
}
interfact IContext {
Service1 getService1();
Service2 getService2();
Service3 getService3();
}
class Global implete IContext{
Service1 getService1(){ new Service1(this) }
Service2 getService2(){ new Service2(this) }
Service3 getService3(){ new Service3(this) }
}
abstract class Service{
IContext mIContext;
custruct(IContext context){
this.mIContext = context;
}
}
class Service1 extend Service{}
class Service2 extend Service{}
class Service3 extend Service{}
// ====================优化1===============
- 假设每个Service的构造函数输入的参数各不相同,那么将会导致顶层的代码错综复杂,此时则需将底层对象创建转移到工厂类中
- 以下结构优势:顶层无需关注底层Service对象的生成,统一使用Factory构造。代码解耦,简洁。
- 总结:此结构用于构建对象树非常简单方便,可以大量应用到项目中。
// ========================================
void main() {
//使用依赖注入,生成各个factory
//通过依赖注入获取到GlobalFactory
GlobalFactory factory;
Global global = factory.create();
//入口
global.getService1();
global.getService2();
global.getService3();
}
interface IContext {
Service1 getService1();
Service2 getService2();
Service3 getService3();
}
class Global implete IContext{
construc(Service1Factory factory1, Service2Factory factory2, Service3Factory factory3){
this.factory1 = factory1;
this.factory2 = factory2;
this.factory3 = factory3;
}
Service1 getService1(){ return factory1.create(this) }
Service2 getService2(){ return factory2.create(this) }
Service3 getService3(){ return factory3.create(this) }
}
abstract class Service{
IContext mIContext;
custruct(IContext context){
this.mIContext = context;
}
}
class GlobalFactory {
construct(Service1Factory factory1, Service2Factory factory2, Service3Factory factory3){
this.factory1 = factory1;
this.factory2 = factory2;
this.factory3 = factory3;
}
Global create(){
return new Global(factory1,factory2,factory3);
}
}
class Service1Factory {
construct(A a){
this.a = a;
}
Service1 create(IContext context){
return new Service1(this.a, context);
}
}
class Service2Factory {
construct(B b){
this.b =b;
}
Service1 create(IContext context){
return new Service1(this.b, context);
}
}
class Service3Factory {
construc(){}
Service3 create(){
return new Service3();
}
}
class Service1 extend Service{ construc(A a, IContext context) {super(context);} }
class Service2 extend Service{ construc(B b, IContext context) {super(context);} }
class Service3 extend Service{}