若转载教程,请注明出自SW-X框架官方文档!

    1. <?php
    2. /**
    3. * 设计模式之外观模式
    4. * 场景:依赖注入, 依赖外观类去调用第三方类的方法,缺点是多次调用会重复占用内存,可配合享元模式实现依赖注入。
    5. * 小黄牛
    6. */
    7. header("Content-type: text/html; charset=utf-8");
    8. /**
    9. * 动物接口
    10. */
    11. interface AnimalInterface{
    12. public function Produce(); // 生产方法
    13. }
    14. /**
    15. * 创建 - 鸡模型
    16. */
    17. class ChiCken implements AnimalInterface{
    18. public function Produce(){
    19. echo "这是一只鸡~<br/>";
    20. }
    21. }
    22. /**
    23. * 创建 - 猪模型
    24. */
    25. class Pig implements AnimalInterface{
    26. public function Produce(){
    27. echo "这是一只猪~<br/>";
    28. }
    29. }
    30. /**
    31. * 外观类
    32. */
    33. class AnimalMaker{
    34. private $_chicken; // 鸡模型实例
    35. private $_pig; // 猪模型实例
    36. public function __construct(){
    37. $this->_chicken = new Chicken();
    38. $this->_pig = new Pig();
    39. }
    40. /**
    41. * 生产鸡
    42. */
    43. public function produceChicken(){
    44. $this->_chicken->produce();
    45. }
    46. /**
    47. * 生产猪
    48. */
    49. public function producePig(){
    50. $this->_pig->produce();
    51. }
    52. }
    53. # 初始化外观类
    54. $animalMaker = new AnimalMaker();
    55. # 生产一只猪
    56. $animalMaker->producePig();
    57. # 生产一只鸡
    58. $animalMaker->produceChicken();

    浏览器输出

    1. 这是一只鸡~
    2. 这是一只猪~

    享元模式

    1. 门面(FacadeCompany)角色:此角色封装一个高层接口,将客户端的请求代理给适当的子系统对象,是门面模式的核心接口。
    2. 子系统(ICBC)角色:实现子系统的具体功能,处理FacadeCompany对象指派的任务。子系统没有FacadeCompany的任何信息,没有对FacadeCompany对象的引用。

    优势

    1. 1、它可以对客户屏蔽子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。
    2. 2 它实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。松耦合关系使得子系统的组件变化不会影响到它的客户。 Facade模式有助于建立层次结构系统,也有助于对对象之间的依赖关系分层。
    3. 3 Facade模式可以消除复杂的循环依赖关系。这一点在客户程序与子系统是分别实现的时候尤为重要。在大型软件系统中降低编译依赖性至关重要。在子系统类改变时,希望尽量减少重编译工作以节省时间。用Facade可以降低编译依赖性,限制重要系统中较小的变化所需的重编译工作。
    4. 4Facade模式同样也有利于简化系统在不同平台之间的移植过程,因为编译一个子系统一般不需要编译所有其他的子系统。