首页 \ 问答 \ 为什么在观察者模式中使用接口?(Why interface is used in observer pattern?)

为什么在观察者模式中使用接口?(Why interface is used in observer pattern?)

我在书中读到应用层应该独立于表示层。 设计模式就是这样的问题的解决方案。 当一个对象应该能够通知其他对象而不假设这些对象是谁时,观察者模式是适用的。但是像addObserver这样的方法会将观察者添加到观察者列表中。 之后,观察可以知道要通知哪些对象。 以及如何使用这些列表? 在我读过的书中,它说可观察的只通过应用层中定义的接口访问观察者,以便保留系统的层结构。 然后界面使用该列表? 如果是这样,有什么区别?


I have read in the book that the application layer is supposed to be independent of the presentation layer. Design pattern are solution to problem like that. Observer pattern is applicable when an object should be able to notify other objects without making assumptions about who those objects are.But a method such as addObserver adds the observers to the list of observers. After that, observerable know which objects are to be notified. And how those list are used? In the book I read, it said that the observerable only access observer through the interface defined in the application layer so that the layer architecture of the system is preserved. Then the interface use that list? lf so, what is the difference?


原文:https://stackoverflow.com/questions/38673403
更新时间:2023-02-01 16:02

最满意答案

<?php
$myarray =array ('black','blue','brown','yellow');
$row['color']='';
?>
<select name='whatever'>

<?php
    if ($row['color']=='' || $row['color']==null){
       echo "<option value=''>----Select----</option>";
    }
    foreach ($myarray as $color){

        if ($row['color']==$color){
            echo"<option value='$color' selected>$color</option>";
        }
        else{
            echo"<option value='$color'>$color</option>";
        }
     }
 ?>


<?php
$myarray =array ('black','blue','brown','yellow');
$row['color']='';
?>
<select name='whatever'>

<?php
    if ($row['color']=='' || $row['color']==null){
       echo "<option value=''>----Select----</option>";
    }
    foreach ($myarray as $color){

        if ($row['color']==$color){
            echo"<option value='$color' selected>$color</option>";
        }
        else{
            echo"<option value='$color'>$color</option>";
        }
     }
 ?>

相关问答

更多
  • 试试这个 function getRadioValue() { for (index=0; index < document.form_data.ciudad.length; index++) { if (document.form_data.ciudad[index].checked) { var radioValue =form_data.ciudad[index].value; return pa ...
  • if(mysqli_num_rows($res) > 0 AND mysqli_num_rows($res2) > 0 ) //Cehck if there are any match with one of the fielde in the database? If it matches, save in database 这部分代码不会“检查与数据库中某个字段的任何匹配”,而是因为您使用的是AND运算符,所以它需要两个条件都为真。 if(mysqli_num_rows($resultat) == 0 ...
  • 字符串之间的比较需要String#equals而不是== 。 所以这: if (playAgain == "yes"){ System.out.println("Restarting game..."); start = true; } else if (playAgain == "no") { System.out.println("Quitting game."); start = false; } 必须成为这个: if (playAgain.equals("yes") ...
  • 相关文章

    更多
  • 初学设计模式【2】观察者模式——Observer
  • JAVA设计模式学习19——观察者模式
  • 关于ibatis3.0源码的疑问"@interface"
  • 利用XUL(XML User-interface Language)是否能提高图形界面的开发效率?
  • Guava学习笔记:EventBus
  • java接口问题
  • Java 接口
  • 设计模式-工厂模式
  • Hadoop异步rpc通信机制--org.apache.hadoop.ipc.Server
  • 微信公众帐号开发教程第3篇-开发模式启用及接口配置

最新问答

更多
  • sp_updatestats是否导致SQL Server 2005中无法访问表?(Does sp_updatestats cause tables to be inaccessible in SQL Server 2005?)
  • 如何创建一个可以与持续运行的服务交互的CLI,类似于MySQL的shell?(How to create a CLI that can interact with a continuously running service, similar to MySQL's shell?)
  • AESGCM解密失败的MAC(AESGCM decryption failing with MAC)
  • Zurb Foundation 4 - 嵌套网格对齐问题(Zurb Foundation 4 - Nested grid alignment issues)
  • 湖北京山哪里有修平板计算机的
  • SimplePie问题(SimplePie Problem)
  • 在不同的任务中,我们可以同时使用多少“上下文”?(How many 'context' we can use at a time simultaneously in different tasks?)
  • HTML / Javascript:从子目录启用文件夹访问(HTML/Javascript: Enabling folder access from a subdirectory)
  • 为什么我会收到链接错误?(Why do I get a linker error?)
  • 如何正确定义析构函数(How to properly define destructor)
  • 垂直切换菜单打开第3级父级。(Vertical toggle menu 3rd level parent stay opened. jQuery)
  • 类型不匹配 - JavaScript(Type mismatch - JavaScript)
  • 为什么当我将模型传递给我的.Net MVC 4控制器操作时,它坚持在部分更新中使用它?(Why is it that when I pass a Model to my .Net MVC 4 Controller Action it insists on using it in the Partial Update?)
  • 在使用熊猫和statsmodels时拉取变量名称(Pulling variable names when using pandas and statsmodels)
  • 如何开启mysql计划事件
  • 检查数组的总和是否大于最大数,反之亦然javascript(checking if sum of array is greater than max number and vice versa javascript)
  • 使用OpenGL ES绘制轮廓(Drawing Outline with OpenGL ES)
  • java日历格式(java Calendar format)
  • Python PANDAS:将pandas / numpy转换为dask数据框/数组(Python PANDAS: Converting from pandas/numpy to dask dataframe/array)
  • 如何搜索附加在elasticsearch索引中的文档的内容(How to search a content of a document attached in elasticsearch index)
  • LinQ to Entities:做相反的查询(LinQ to Entities: Doing the opposite query)
  • 从ExtJs 4.1商店中删除记录时会触发哪些事件(Which events get fired when a record is removed from ExtJs 4.1 store)
  • 运行javascript后如何截取网页截图[关闭](How to take screenshot of a webpage after running javascript [closed])
  • 如何使用GlassFish打印完整的堆栈跟踪?(How can I print the full stack trace with GlassFish?)
  • 如何获取某个exe应用程序的出站HTTP请求?(how to get the outbound HTTP request of a certain exe application?)
  • 嗨,Android重叠背景片段和膨胀异常(Hi, Android overlapping background fragment and inflate exception)
  • Assimp详细说明typedef(Assimp elaborated type refers to typedef)
  • 初始化继承类中不同对象的列表(initialize list of different objects in inherited class)
  • 使用jquery ajax在gridview行中保存星级评分(Save star rating in a gridview row using jquery ajax)
  • Geoxml3 groundOverlay zIndex(Geoxml3 groundOverlay zIndex)