Design patterns Fa和xE7;艾德与调解人
我一直在研究这两种模式之间的区别 我知道facade封装了对子系统的访问,mediator封装了组件之间的交互 我知道子系统组件不知道facade,而as组件显然知道mediator 我目前正在使用facade来封装检索配置信息的方法,例如App.Config、存储在SQL中的用户设置、程序集信息等,以及用于在不同windows窗体之间导航的中介Design patterns Fa和xE7;艾德与调解人,design-patterns,facade,mediator,Design Patterns,Facade,Mediator,我一直在研究这两种模式之间的区别 我知道facade封装了对子系统的访问,mediator封装了组件之间的交互 我知道子系统组件不知道facade,而as组件显然知道mediator 我目前正在使用facade来封装检索配置信息的方法,例如App.Config、存储在SQL中的用户设置、程序集信息等,以及用于在不同windows窗体之间导航的中介 然而,大多数网站指出,中介“增加了功能”。这是什么意思?mediator如何添加功能?我正在使用mediator添加日志文件功能 它的工作原理如下:
然而,大多数网站指出,中介“增加了功能”。这是什么意思?mediator如何添加功能?我正在使用mediator添加日志文件功能 它的工作原理如下:
- Obj A告诉调解人它需要做点什么
- 中介将消息发送到各种客户机对象
- Obj B做Obj A需要的事情,并通过中介器发送适当的消息
- 同时,objc也由中介器发送这两条消息,并记录结果。这样,我们可以从日志文件中获取用户统计信息
- Obj D也可以是一个错误检查器,因此,如果Obj B响应Obj A的请求是不可能的,则Obj D可以是向用户报告该请求的东西。错误现在可以记录在与常规活动不同的文件中,并且可以使用其他一些Obj a不应该真正关心的方式来表现(嘟嘟声,无论什么)
parkingLot.Out(car1);
mab是一个简单的链条工程:
{
car1.StartEngin();
attendant.charge();
car1.driverOut();
}
调解人:就像红绿灯一样
光和车之间有相互作用
汽车是由国家控制的
我想这可能是中介“添加功能”
关于定义: 立面类型:结构 调解人类型:行为型 facade更关心组件包含在统一界面中
mediator关注的是如何在相关模式下一组对象进行交互,他说:Facade(185)与mediator的不同之处在于它抽象了对象的子系统,以提供更方便的接口。它的协议是单向的;也就是说,Facade对象对子系统类发出请求,但反之亦然。相反,Mediator支持同事对象不提供或不能提供的合作行为,协议是多向的。您可以在这个问题中找到有关Facade模式的详细信息:
Facade
为复杂系统提供了一个简单统一的界面
真实世界示例(cleartrip f
Logger logger = new Logger();
logger.initLogger("someLogger");
logger.debug("message");
class Logger {
private java.io.PrintStream out;
private java.net.Socket client;
private java.sql.Connection dbConnection;
private String loggerName;
public void initLogger( String loggerName ) {
this.loggerName = loggerName;
if ( loggerName == "someLogger" ) {
out = new PrintStream( new File("app.log"));
} else if ( loggerName == "serverLog" ) {
client = new Socket("127.0.0.1", 1234 );
} else if( loggerName == "dblog") {
dbConnection = Class.forName()... .
}
}
public void debug( String message ) {
if ( loggerName == "someLogger" ) {
out.println( message );
} else if ( loggerName == "serverLog" ) {
ObjectOutputStrewam oos =
new ObjectOutputStrewam( client.getOutputStream());
oos.writeObject( message );
} else if( loggerName == "dblog") {
Pstmt pstmt = dbConnection.prepareStatment( LOG_SQL );
pstmt.setParameter(1, message );
pstmt.executeUpdate();
dbConnection.commit();
}
}
}
parkingLot.Out(car1);
{
car1.StartEngin();
attendant.charge();
car1.driverOut();
}