`

java设计模式--[结构模式]--门面模式[decorator pattern]

阅读更多

 一. 門面模式

     門面模式,又叫外觀模式,一個大的系統由若干個子系統構成,每個子系統中包含多個類,這些類協同合作為用戶提供所需要的功能,若直接和子類進行交互,則就形成了依賴關係,門面模式就是用來解決此問題的一個成熟模式.

 

二. 門面模式的UML類圖如下所示:
     
 

三. 現在用一個郵局的物流系統來模擬這個門面模式的實現,完整示例代碼如下:

 

1. 物流接口類

package structuralPattern.facade.facade1;
/**
 * @ClassName: ILogistics 
 * @Description:物流接口
 * @author Liyongbin
 * @date 2011-2-9 上午11:20:48 
 * @version V1.0
 */
public interface ILogistics {
	//發貨
	public ILogistics sub_send();
	//收貨
	//public ILogistics sub_receive();
}

 

2. 郵局類

package structuralPattern.facade.facade1;
/**
 * @ClassName: Postoffice 
 * @Description:郵局類
 * @author Liyongbin
 * @date 2011-2-9 上午11:21:31 
 * @version V1.0
 */
public class Postoffice implements ILogistics{
	
	//
	private Sub_measurement measurement;
	private Sub_package packaging;
	private Sub_weighIn weighIn;
	private Sub_countPrice countprice;
	private Sub_mailing miling;
	
	//無參構造器
	public Postoffice() {
		super();
	}
	//構造器
	public Postoffice(Sub_measurement measurement, Sub_weighIn weighIn, Sub_package packaging,
			Sub_countPrice countprice, Sub_mailing amiling) {
		super();
		this.measurement = measurement;
		this.weighIn = weighIn;
		this.packaging = packaging;
		this.countprice = countprice;
		this.miling = amiling;
	}
	//運送物品
	@Override
	public ILogistics sub_send() {
		packaging.packaging();
		measurement.measurement();
		weighIn.weighIn();
		countprice.countPrice();
		miling.mailing();
		return null;
	}
}

 

3. 物品打包類

package structuralPattern.facade.facade1;
/**
 * @ClassName: Sub_package 
 * @Description:物品打包
 * @author Liyongbin
 * @date 2011-2-9 上午11:34:16 
 * @version V1.0
 */
public class Sub_package {
	public void packaging(){
		System.out.println("流程開始");
		System.out.println("包裝物品...");
	}
}

 

4. 量物品體積

package structuralPattern.facade.facade1;
/**
 * @ClassName: Sub_measurement 
 * @Description:量物品體積
 * @author Liyongbin
 * @date 2011-2-9 上午11:32:56 
 * @version V1.0
 */
public class Sub_measurement {
	public void measurement(){
		System.out.println("測量物品體積...");
	}
}

 

5. 物品稱重

package structuralPattern.facade.facade1;
/**
 * @ClassName: Sub_weighIn 
 * @Description:物品稱重
 * @author Liyongbin
 * @date 2011-2-9 上午11:31:29 
 * @version V1.0
 */
public class Sub_weighIn {
	public void weighIn(){
		System.out.println("稱物品重量...");
	}
}

 

6. 投遞物品

package structuralPattern.facade.facade1;
/**
 * @ClassName: Sub_mailing 
 * @Description:投遞物品
 * @author Liyongbin
 * @date 2011-2-9 上午11:38:43 
 * @version V1.0
 */
public class Sub_mailing {
	public void mailing(){
		System.out.println("投遞物品...");
		System.out.println("流程結束");
	}
}

 

7. 測試類

package structuralPattern.facade.facade1;
/**
 * @ClassName: FacadeTest 
 * @Description: 門面測試類
 * @author Liyongbin
 * @date 2011-2-9 上午11:55:25 
 * @version V1.0
 */
public class FacadeTest {
	public static void main(String[] args) {
		
		//實例化組件
		 Sub_measurement measurement = new Sub_measurement();
		 Sub_package packaging=new Sub_package();
		 Sub_weighIn weighIn= new Sub_weighIn();
		 Sub_countPrice countprice =new Sub_countPrice();
		 Sub_mailing miling =new Sub_mailing();
		 
		//實例化郵局
		ILogistics lt= new Postoffice(measurement,weighIn,packaging,countprice,miling);
		//郵寄物品
		lt.sub_send();
	}
}

 

8. 運行結果如下:
   

  • 大小: 13.9 KB
  • 大小: 7 KB
1
4
分享到:
评论

相关推荐

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、命令模式COMMAND PATTERN 13、装饰模式...

    C#设计模式.PDF

    C#设计模式(12)-Decorator Pattern 101 一、 装饰(Decorator)模式 101 二、 装饰模式的结构 102 三、 装饰模式示例性代码 103 四、 装饰模式应当在什么情况下使用 106 五、 装饰模式实际应用的例子 106 六、 ...

    C#设计模式大全

    C#设计模式(12)-Decorator Pattern 一、 装饰(Decorator)模式 二、 装饰模式的结构 三、 装饰模式示例性代码 四、 装饰模式应当在什么情况下使用 五、 装饰模式实际应用的例子 六、 使用装饰模式的优点和...

    JAVA设计模式.rar

    门面模式【FACADE PATTERN】  适配器模式【ADAPTER PATTERN】  模板方法模式【TEMPLATE METHOD PATTERN】  建造者模式【BUILDER PATTERN】 桥梁模式【BRIDGE PATTERN】  命令模式【COMMAND PATTERN...

    网络编程、常用设计模式

    详细的jsp网络编程、常用设计模式! 前言 3 第一部分:网络编程 4 一、了解URL 4 二、读取URL中的资源 4 1、URL构造方法: 5 2、读取资源 5 三、INETADDRESS类 5 四、SOCKET类 6 1、Socket套接字连接 6 2、Socket...

    软件开发中的23种设计模式

    23种模式(Pattern) 1、创建形模式: 1)、单用型:Singleton 2)、工厂方法型:Factory Method 3)、抽象工厂型:Abstract Factory 4)、原型:Prototype 5)、建造型:Builder 2、结构型模式:类与类之间的调用 1...

    二十三种设计模式【PDF版】

    设计模式之 Facade(门面?) 可扩展的使用 JDBC针对不同的数据库编程,Facade提供了一种灵活的实现. 设计模式之 Composite(组合) 就是将类用树形结构组合成一个单位.你向别人介绍你是某单位,你是单位中的一个元素...

    Java设计模式

    Java设计模式 策略模式【STRATEGY PATTERN】 .................................................................................................. 4 第 2 章 代理模式【PROXY PATTERN】 ..........................

    24个设计模式与6大设计原则

    第 7 章 门面模式【FACADE PATTERN】 44 第 8 章 适配器模式【ADAPTER PATTERN】 51 第 9 章 模板方法模式【TEMPLATE METHOD PATTERN】 63 第 10 章 建造者模式【BUILDER PATTERN】 82 第 11 章...

    java 面试题 总结

    JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...

    超级有影响力霸气的Java面试题大全文档

    超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。...

Global site tag (gtag.js) - Google Analytics