设计模式之外观模式(Java实现)

Facade(外观)

一、意图

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

二、结构

外观模式的结构如图7-35所示。
在这里插入图片描述
其中:
• Facade知道哪些子系统类负责处理请求;将客户的请求代理给适当的子系统对象。
• Subsystem classes实现子系统的功能;处理有Facade对象指派的任务;没有Facade的任何相关信息,即没有指向Facade的指针。

三、适用性

Facade模式适用于:
• 要为一个复杂子系统提供一个简单接口时,子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类,这使得子系统更具有可重用性,也更容易对子系统进行定制,但也给那些不需要定制子系统的用户带来一些使用上的困难。 Facade可以提供一个简单的默认视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过Facade层。
• 客户程序与抽象类的实现部分之间存在着很大的依赖性。引入Facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
•当需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点。 如果子系统之间是相互依赖的,则可以让它们仅通过Facade进行通信,从而简化了它们之间的依赖关系。

四、实现

我们将创建一个 Shape 接口和实现了 Shape 接口的实体类。下一步是定义一个外观类 ShapeMaker。
ShapeMaker 类使用实体类来代表用户对这些类的调用。FacadePatternDemo 类使用 ShapeMaker 类来显示结果。
在这里插入图片描述

首先 创建一个接口

interface Shape {
	void draw();
}

然后 创建实现接口的实体类

class Rectangle implements Shape {
	 
	   @Override
	   public void draw() {
	      System.out.println("矩形被画出来了");
	   }
}

class Square implements Shape {
	 
	   @Override
	   public void draw() {
	      System.out.println("正方形被画出来了");
	   }
}
 
class Circle implements Shape {
	 
	   @Override
	   public void draw() {
	      System.out.println("圆被画出来了");
	   }
}

其次 创建一个外观类

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();
	   }
}

最后 使用该外观类画出各种类型的形状

public class Facade {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ShapeMaker shapeMaker = new ShapeMaker();		 
	    shapeMaker.drawCircle();
	    shapeMaker.drawRectangle();
	    shapeMaker.drawSquare();  
	}

}

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值