• java设计模式-外观模式


    模式导读:

            生活中,我们时常都会接触到各种各样的物品,它们都有各自不同的功能,外形,我们在购买它们时它们已经是个完全体,已经拥有了颜色,漂亮的外观形状等等,我们并不清楚它们是经过怎样的工序最后上架售卖的,这便是外观模式的常见场景。同时在我们写程序时也会经常出现这样的场景,为减少一个软件实体与其他实体的相互作用,我们一般会借助一个类似现实生活中的服务员类,将所需要的其他类对象方法封装在服务员类里面,这样便于我们调用,更能提高效率。为子系统提供统一的入口,封装子系统的复杂性,便于客户端调用,这就是外观模式。

    参考类图:

    代码实现:

    1.定义一个抽象的产品接口

    1 package com.etc.facade;
    2 //定义一个台式电脑的抽象接口
    3 public interface Desktop{
    4     
    5     void design();
    6 
    7 }

    2.具体产品部件子类

     1 package com.etc.facade;
     2 //键盘
     3 public class KeyBoard implements Desktop{
     4 
     5     @Override
     6     public void design() {
     7         System.out.println("键盘已成功装配!");
     8     }
     9 
    10 }
     1 package com.etc.facade;
     2 //主机箱
     3 public class MasterBox implements Desktop{
     4 
     5     @Override
     6     public void design() {
     7         System.out.println("主机箱已成功装配!");    
     8     }
     9 
    10 }
     1 package com.etc.facade;
     2 //鼠标
     3 public class Mouse implements Desktop{
     4 
     5     @Override
     6     public void design() {
     7         System.out.println("鼠标已成功装配!");
     8     }
     9 
    10 }
     1 package com.etc.facade;
     2 //显示屏
     3 public class Screen implements Desktop{
     4 
     5     @Override
     6     public void design() {
     7         System.out.println("显示屏已成功装配!");
     8     }
     9 
    10 }

    3.外观类,将各部件组装起来

     1 package com.etc.facade;
     2 
     3 public class Facade {
     4     
     5     private Desktop keyBoard;
     6     private Desktop master;
     7     private Desktop mouse;
     8     private Desktop screen;
     9     
    10     //将所有需要的部件组装起来
    11     public void construct() {
    12         //实例化对象
    13         keyBoard=new KeyBoard();
    14         master=new MasterBox();
    15         mouse=new Mouse();
    16         screen=new Screen();
    17   
    18         keyBoard.design();
    19         master.design();
    20         mouse.design();
    21         screen.design();
    22     }
    23 
    24 }

    4.客户端类

    1 package com.etc.facade;
    2 //客户端类
    3 public class Client {
    4 
    5     public static void main(String[] args) {
    6         Facade facade=new Facade();
    7         facade.construct();
    8     }
    9 }

    效果截图:

    外观模式优缺点:

    优点:

    1、减少系统相互依赖。
    2、提高灵活性。
    3、提高了安全性。

    缺点:

    不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

    适用场景:

    1、为复杂的模块或子系统提供外界访问的模块。
    2、子系统相对独立。
    3、预防低水平人员带来的风险。

  • 相关阅读:
    android sdk里的各目录作用
    android广播接收器
    Android 服务
    全球10个智慧城市应用案例
    大数据应用蓝皮书:未来涉及5个热点领域
    2018杭州-云栖大会
    上海世界人工智能大会大佬观点
    2018世界人工智能大会
    大数据安全
    2018第37周六
  • 原文地址:https://www.cnblogs.com/weekstart/p/10884726.html
Copyright © 2020-2023  润新知