门面模式/外观模式
2016-05-11 09:47
375 查看
原文链接:http://www.tutorialspoint.com/design_pattern/facade_pattern.htm
Facade Pattern(门面模式/外观模式) 隐藏了系统的复杂性,为客户端访问系统提供了一个接口。Facade Pattern 属于结构型模式的一种,通过添加一个接口来隐藏现有系统的复杂性。
Facade Pattern 涉及到一个类,这个类代理调用了现有系统的类的一些方法,从而为客户端提供了简化的方法来访问系统。
ShapeMaker 使用具体的类来代理用户想要访问的类。FacadePatternDemo 是一个 demo 类,会用 ShapeMaker 类来展示结果。
Shape.java
Rectangle.java
Square.java
Circle.java
ShapeMaker.java
FacadePatternDemo.java
Facade Pattern(门面模式/外观模式) 隐藏了系统的复杂性,为客户端访问系统提供了一个接口。Facade Pattern 属于结构型模式的一种,通过添加一个接口来隐藏现有系统的复杂性。
Facade Pattern 涉及到一个类,这个类代理调用了现有系统的类的一些方法,从而为客户端提供了简化的方法来访问系统。
实现
我们将会创建一个 Shape 接口和 Shape 接口的具体实现类。下一步中会定义一个 facade 类 ShapeMaker。ShapeMaker 使用具体的类来代理用户想要访问的类。FacadePatternDemo 是一个 demo 类,会用 ShapeMaker 类来展示结果。
第一步
创建一个接口。Shape.java
public interface Shape { void draw(); }
第二步
创建 Shape 接口的具体实现类。Rectangle.java
public class Rectangle implements Shape { @Override public void draw() { System.out.println("Rectangle::draw()"); } }
Square.java
public class Square implements Shape { @Override public void draw() { System.our.println("Square::draw()"); } }
Circle.java
public class Circle implements Shape { @Override public void draw() { System.out.println("Circle::draw()"); } }
第三步
创建一个 facade 类。ShapeMaker.java
public class ShapeMaker { private Shape circle; private shape rectangle; private shape square; public ShapeMaker() { circle = new Circle(); rectangle = new Rectangle(); square = new Square(); } public void drawCircle() { circle.draw(); } public void drawRectangle() { rectangle.draw(); } public void drawSquare() { square.draw(); } }
第四步
使用 facade 绘制各种类型的形状。FacadePatternDemo.java
public class FacadePatternDemo { public void main(String[] args) { ShapeMaker shapeMaker = new ShapeMaker(); shapeMaker.drawCircle(); shapeMaker.drawRectangle(); shapeMaker.drawSquare(); } }
第五步
验证结果。Circle::draw() Rectangle::draw() Square::draw()
相关文章推荐
- Android 内功心法(1.5)——android常用设计模式之命令模式
- 打印
- 使用自带 cluster-reuters.sh 聚类使用
- 自定义 Date类型转换是报
- log4j 打印sql,按日期生成文件,生成文件位置
- stm32——RTC实时时钟
- Spring Remoting: HTTP Invoker--转
- 基于python的语言检测服务
- rem
- 团队作业(六)
- 泛型
- 通过UpdateManager升级ESXi主机到ESXi5.x
- java 高级for循环
- mysql 使用 informatin_schema tables 创建 shell commands
- 团队作业(七)
- [置顶] android webview与js交互(动态添加js)
- onpopstate浏览器点击回退按钮时触发的事件
- JCo 在Java中调用ABAP服务
- 利用PopupWindow做出仿IOS样式的选择器
- 圣人不仁