Delegate Pattern(委托模式)的 例子,Java代理设计模式的用法和理解

Delegate Method (委托函数):是一种结合接口、多态、封装等特性的用于代理(委托)模式设计的一种函数。

委托模式:在软件工程中,委托模式是一种面向对象的设计模式,允许对象组合实现与继承相同的代码重用。

详见维基-https://en.wikipedia.org/wiki/Delegation_pattern

作用:为其他对象提供一种类似代理的方式以控制对这个对象的访问。

例子:

 

关于 Delegate 设计模式,可以这么理解:

(以下故事纯属虚构,我是小米的忠实粉)
故事很简单……某次小米发布会上,大屏幕显示着 本款小米8采用的是三星的OLED屏幕!
身为科技盲的你觉得小米真牛逼,
于是跑去问三星:"你们这么大方给了小米OLED技术?"
三星一脸懵逼:"屁咧!我给小米OLED技术干嘛,找抽啊?"
-------------------------------
原来事实是这样的,OLED技术 三星-有、华为-有、代理商富土康-也有,小米-没有。

· 三星、华为有自己的OLED技术图纸,本来小米胆子大直接偷来他们API就可以生产OLED屏幕了哈哈哈。

· 但是 小米又不好意思直接调 三星 或 华为的Oled接口 去生产OLED屏幕。

  • OLED技术接口长这样儿的:
/**
 * @Description:  A screen Tch for a phone 一种手机屏幕技术 (接口)
 * OLED Tch has a final stander OLED屏幕技术有一个业界通用的标准,但是具体的生产技术流程每个大公司有自己的技术工艺
 */
public interface OledTch {
	
	//技术名称
	public void tchName();
	//色彩饱和度
	public void colorSaturation();
}

 

  • 三星的OLED设计图纸(华为同理):
/**
 * 
 * @Description: Object of Sumsung company 三星公司,有自己的OLED的生产技术, 继承OLED 接口
 * @Date: Oct 6, 2018 4:32:30 PM
 */
public class Sumsung implements OledTch {

	@Override
	public void tchName() {
		// TODO Auto-generated method stub
		System.out.print("Sumsung OLED");

	}

	@Override
	public void colorSaturation() {
		// TODO Auto-generated method stub
		System.out.print("98%NTSC - Sumsung OLED");

	}
}

· 于是乎,雷军爸爸想到了找 代理商-富土康 帮忙生产 三星的OLED屏幕。

/** 注意了:
1、Oled 接口,虽说名字一样、屏幕效果一样的,但是三星的OLED技术 和 华为的OLED技术在生产工序上还是有很大不同的。
2、富土康 其实没有自己的OLED生产图纸,但实质上 无论谁叫他代理去生产OLED屏幕,他都默认用 华为的OLED生产图纸。

  • (代理商)富土康的类
/**
 * 
 * @Description: Object of FoXcoon company 富土康公司,没有自己的OLED的生产技术, 有生产版权,也继承OLED 接口 (我相信真正的富S康有的!~)
 * @Date: Oct 6, 2018 4:54:24 PM
 */
public class Fotconn implements OledTch {
	private OledTch oledMap; //富土康的OLED生产图纸
	
	//构造函数:甲方指定用哪家的图纸就用哪家的图纸
	public Fotconn(OledTch oledMap) {
		this.oledMap = oledMap;
	}
	
	//构造函数:默认情况下,用华为的生产图纸
	public Fotconn() {
		this.oledMap = new Huawei();
	}
	
	@Override
	public void tchName() {
		// TODO Auto-generated method stub
		System.out.print("| 富土康生产的——");
		oledMap.tchName();
		System.out.print(" |");
	}
	
	@Override
	public void colorSaturation() {
		// TODO Auto-generated method stub
		System.out.print("| 富土康生产的——");
                oledMap.colorSaturation();
		System.out.print(" |");
	}

}
  • (委托商)小米的生产线上,是这样的:
/**
 * @Description: Pipeline of Xiaomi, who require a production of SumsungOLED but product by Fotconn (小米,要通过富土康来代理生产 三星的OLED产品)
 * @Date: Oct 6, 2018 5:05:35 PM
 */
public class Xiaomi_Pipeline {

	public void oled() {
		Sumsung sumsung = new Sumsung(); //确定使用三星的OLED技术
		Fotconn fotconn = new Fotconn(sumsung);//告诉乙方 富土康:“我要三星图纸生产的OLED”
		
		System.out.println("小米正在生产: ");
		fotconn.tchName();
		fotconn.colorSaturation();

	}

}


生产开始了: 在 小米8的生产流水线里,new 了一个 用三星图纸生产的富土康 Fotconn(new Samsung()), 这样用富土康生产的OLED屏幕,在发布会上就说是采用三星OLED屏幕啦~ 代理成功!

  • 建立小米8的Junit 测试类
/**
 * @Description: Test for Xiaomi8
 * @Date: Oct 6, 2018 7:34:59 PM
 */
public class Xiaomi_PipelineTest {
	
	@Test
	public void testXiaomi8() {
		Xiaomi_Pipeline xiaomi8 = new Xiaomi_Pipeline();
		xiaomi8.oled();
		
	}
}

运行结果:

 

至此,小米8成功通过 代理商富土康 生产 三星的OLED 手机屏幕啦;

更多例子可参考这俩文章:

源码:http://www.yytpublic.cn/downloadCSDN/delegatePattern.rar

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值