湖北seo推广系统,站优云seo优化,百度广告联盟标识,做搜狗网站排名软件说明#xff1a;本文介绍设计模式中结构型设计模式中的#xff0c;外观模式#xff1b;
亲手下厨还是点外卖#xff1f;
外观模式属于结构型的设计模式#xff0c;关注类或对象的组合#xff0c;所呈现出来的结构。以吃饭为例#xff0c;在介绍外观模式之前#xff0…说明本文介绍设计模式中结构型设计模式中的外观模式
亲手下厨还是点外卖
外观模式属于结构型的设计模式关注类或对象的组合所呈现出来的结构。以吃饭为例在介绍外观模式之前通过这个例子谈谈我对面向对象的理解。
吃饭是一个功能可以有两种方式来实现对应的正是面向过程和面向对象的思想。
第一种自己买菜买工具初始化变量做饭实现方法吃饭实现方法洗碗卖工具释放内存空间
第二种点外卖手机对象做饭店家对象送外卖外卖员对象吃饭顾客对象 通过比较就很容易理解两种设计思想了。实际上就是实现功能的思路一种是将功能分为一步一步逐步实现面向过程一种是将属性和行为封装为对象让功能的实现在对象的交互中实现。
这两种解题思路没有高低之分也没有哪种更优秀殊途同归。
外观模式
以上面吃饭为例面向对象设计如下
Vegetables蔬菜对象提供蔬菜
/*** 蔬菜对象*/
public class Vegetables {public void provide() {System.out.println(提供蔬菜);}
}Cook厨师对象做饭
/*** 厨师*/
public class Cook {public void cook() {System.out.println(做饭);}
}用餐者对象吃饭吃完饭洗碗
/*** 食客*/
public class Diners {public void eat() {System.out.println(吃饭);}public void wash() {System.out.println(洗碗);}
}Client客户端演示吃饭功能
/*** 客户端*/
public class Client {public static void main(String[] args) {new Vegetables().provide();new Cook().cook();new Diners().eat();new Diners().wash();}
}执行结果 通过上面的例子我们可以看出实现一个功能涉及到多个对象的配合那为什么我们不把这些对象中对应的功能方法绑定到一起合并成一个业务层面上的功能吃饭呢
如下
EatFacede吃饭外观类捆绑各个对象的方法实现吃饭功能
/*** 吃饭外观类*/
public class EatFacede {/*** 蔬菜对象*/private Vegetables vegetables;/*** 厨师对象*/private Cook cook;/*** 食客对象*/private Diners diners;public EatFacede() {vegetables new Vegetables();cook new Cook();diners new Diners();}/*** 吃饭*/public void eat() {vegetables.provide();cook.cook();diners.eat();diners.wash();}
}Client客户端演示吃饭流程只需要调用吃饭外观类中的eat()方法即可
/*** 客户端*/
public class Client {public static void main(String[] args) {new EatFacede().eat();}
}执行结果
以上就是结构型设计模式中外观模式的内容。这种将繁多的对象方法合并到一起实现一项“大功能”的思路与生活经验非常贴合。例如开公司公司的合伙人一边有资金一边有技术聚在一起开公司干大事。
另外在三层框架开发中Controller层只管调用Service层中的一个方法而在Service层中该方法内可能去调用了其他Bean对象的方法最终才实现了本Service中的这个功能这也是外观模式的体现。
总结
本文参考《设计模式的艺术》、《秒懂设计模式》两书