欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

外观模式——美食天下

程序员文章站 2022-04-27 16:42:02
...

一模式定义

外观模式,是软件工程师常用的一种软件设计模式。它为子系统中的一组接口提供一个统一的高层接口,使子系统更容易使用。外观模式通过一个外观接口读/写子系统中的各接口的数据资源,而客户可以通过外观接口读取内部资源库,不与子系统产生交互。

 

二模式举例

1模式分析

我们借用美食天下菜谱中制作糖醋排骨这一道菜来说明这一模式。


外观模式——美食天下
            
    
    博客分类: 设计 外观模式设计模式迪米特法则子系统封装 
 

2外观模式静态类图

外观模式——美食天下
            
    
    博客分类: 设计 外观模式设计模式迪米特法则子系统封装 
 

3代码示例

3.1创建糖醋排骨接口一ISpareribs

package com.demo.common;

/**
 * 糖醋排骨接口
 * 
 * @author
 * 
 */
public interface ISpareribs {
	// 准备材料
	public void prepair();

	// 腌制排骨
	public void preserve();

	// 炸排骨
	public void fry();

	// 调汁
	public void juice();

}

3.2糖醋排骨实现类一Spareribs

package com.demo.common;

/**
 * 
 * 糖醋排骨实现类
 * 
 * @author
 * 
 */
public class Spareribs implements ISpareribs {
	// 准备材料
	@Override
	public void prepair() {
		System.out.println("1.准备猪排骨500克,葱末、姜末、酱油、花生油、白糖、醋、料酒、盐各适量...");
	}

	// 腌制排骨
	@Override
	public void preserve() {
		System.out.println("2.将排骨洗净剁成3厘米长段,用开水汆一下,捞出放盆内,加入盐、酱油腌入味...");
	}

	// 炸排骨
	@Override
	public void fry() {
		System.out.println("3.炒锅注油烧至六成热,下排骨炸至淡黄色捞出;油温加热至八成,再下锅炸至金黄色捞出...");
	}

	// 调汁
	@Override
	public void juice() {
		System.out
				.println("4.炒锅留少许油烧热,下入葱花,姜末爆香,加入适量清水、酱油、醋、白糖、料酒、倒入排骨,烧开后用慢火煨至汤汁浓,排骨熟,淋上熟油,出锅即可!");

	}

}

3.3创建外观接口一ICookFacade

package com.demo.facade;

/**
 * 外觀模式制作糖醋排骨
 * 
 * @author
 * 
 */
public interface ICookFacade {
	// 做糖醋排骨
	public void cookSpareribs();
}

3.4外观实现一CookFacade

package com.demo.facade;

import com.demo.common.ISpareribs;
import com.demo.common.Spareribs;

/**
 * 外觀模式制作糖醋排骨
 * 
 * @author
 * 
 */
public class CookFacade implements ICookFacade {
	// 糖醋排骨排骨接口
	private final ISpareribs spareribs = new Spareribs();

	// 做糖醋排骨
	public void cookSpareribs() {
		// 准备材料
		this.spareribs.prepair();
		// 腌制排骨
		this.spareribs.preserve();
		// 炸排骨
		this.spareribs.fry();
		// 调汁
		this.spareribs.juice();
	}
}

3.5客户端测试

package com.demo;

import com.demo.facade.CookFacade;
import com.demo.facade.ICookFacade;

/**
 * 客户端应用程序
 * 
 * @author
 * 
 */
public class Client {
	public static void main(String[] args) {
		// 开始做糖醋排骨了!
		System.out.println("==== 开始做糖醋排骨...");
		// // 创建糖醋排骨对象实例
		// ISpareribs spareribs = new Spareribs();
		// // 准备材料
		// spareribs.prepair();
		// // 腌制排骨
		// spareribs.preserve();
		// // 炸排骨
		// spareribs.fry();
		// // 调汁
		// spareribs.juice();

		ICookFacade cookFacade = new CookFacade();
		cookFacade.cookSpareribs();
		System.out.println("==== 糖醋排骨制作完成!");
	}
}

4运行结果

==== 开始做糖醋排骨...

1.准备猪排骨500克,葱末、姜末、酱油、花生油、白糖、醋、料酒、盐各适量...

2.将排骨洗净剁成3厘米长段,用开水汆一下,捞出放盆内,加入盐、酱油腌入味...

3.炒锅注油烧至六成热,下排骨炸至淡黄色捞出;油温加热至八成,再下锅炸至金黄色捞出...

4.炒锅留少许油烧热,下入葱花,姜末爆香,加入适量清水、酱油、醋、白糖、料酒、倒入排骨,烧开后用慢火煨至汤汁浓,排骨熟,淋上熟油,出锅即可!

==== 糖醋排骨制作完成!

 

三该模式设计原则

1 迪米特法则——最小知识原则

2 封装变化部分


外观模式——美食天下
            
    
    博客分类: 设计 外观模式设计模式迪米特法则子系统封装 
 该图进一步展示了客户端应用程序,外观模式和子系统内部复杂应用三者的关系.

 

四使用场合

1 一个软件系统的复杂度比较高,需要一个更高级别的简单接口简化对子系统的操作时。

2 当使用端与实现类之间有太多的依赖性,需要降低使用端与子系统或子系统间的耦合性,增加子系统的独立性时。

3当子系统是相互依存的,需要层级化子系统,简化子系统之间的相依性的时候,可以使用外观模式。

 

五 外观模式静态类图


外观模式——美食天下
            
    
    博客分类: 设计 外观模式设计模式迪米特法则子系统封装 
 

  • 外观模式——美食天下
            
    
    博客分类: 设计 外观模式设计模式迪米特法则子系统封装 
  • 大小: 141.1 KB
  • 外观模式——美食天下
            
    
    博客分类: 设计 外观模式设计模式迪米特法则子系统封装 
  • 大小: 37.9 KB
  • 外观模式——美食天下
            
    
    博客分类: 设计 外观模式设计模式迪米特法则子系统封装 
  • 大小: 42.1 KB
  • 外观模式——美食天下
            
    
    博客分类: 设计 外观模式设计模式迪米特法则子系统封装 
  • 大小: 39.7 KB