设计模式——适配器模式+外观模式

  • 适配器模式
定义
	将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
  • 原理
适配器通过实现目标接口,将自己包装成真正需要的类型,而在内部通过组合被适配的类型,表面调用的是目标类型的方法,实际上是由被适配类型方法实现的。
eg:
	//实现Enumeration的接口,让自己表面上看着是一个Enumeration
	public class IteratorAdapter implements Enumeration {

    	//组合被适配者
    	Iterator iterator;


    	public IteratorAdapter(Iterator iterator){
        	this.iterator = iterator;
    	}


    	//表面调用的是Enumeration的方法,实际上是由被适配者Iterator的方法完成具体工作的。
    	@Override
    	public boolean hasMoreElements() {
        	return iterator.hasNext();
    	}

    	@Override
    	public Object nextElement() {
        	return iterator.next();
    	}
	}
  • 装饰者和适配器
1.装饰者是添加新的行为或者责任,适配器是转换接口
2.适配器一定会转换接口,但是装饰者不会改变接口。
  • 代码示例
design-mode-demo/pattern/adapter
  • 外观模式
定义
	提供一个统一的接口,访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易使用。
	eg:
	//子系统
	public class A {
		void a1();
		void a2();
	}
	public class B {
		void b1();
		void b2();
		void b3();
	}
	public class C {
		void c1();
		void c2();
	}
	//为了完成某个功能,需要以下流程
	A a = new A();
	B b = new B();
	C c = new C();
	a.a1();
	b.b2();
	c.c1();
	a.a2();
	b.b1();
	c.c2();
	b.b3();
	//现在为了简化上述操作,提供一个统一的接口,供调用者访问
	public class T{
		//组合子系统的组件
		A a;
		B b;
		C c;
		public T(A a, B b, C c){
			this.a = a;
			this.b = b;
			this.c = c;
		}
		public void t(){
			a.a1();
			b.b2();
			c.c1();
			a.a2();
			b.b1();
			c.c2();
			b.b3();
		}
	}
	//现在完成该功能时,只需要调用T类的t方法就行,不需要像之前那么复杂。
  • 外观模式优点
简化原有复杂接口的同时,依然将完整的功能暴露出来,以供他人使用。
  • 适配器和外观模式
关注的意图不同:
	适配器是改变(转换)接口,符合当下的所需。
	外观模式,提供子系统的一个简化接口。
  • 最少知识原则
最少知识原则:只和你的密友谈话。
解析:
	在设计过程中,不要让太多的类耦合在一起。如果许多类之间相互依赖,那么系统之间就会变的复杂,难以维护。

	方针:
		调用属于以下范围的方法:
			该对象本身
			被当作方法的参数而传递进来的对象
			此方法所创建或实例化的任何对象
			对象的任何组件
  • 装饰者、适配器、外观模式
适配器将一个对象包装起来以改变其接口;
装饰者将一个对象包装起来以增加新的行为和责任;
外观模式将一群对象“包装”(被包装的对象的接口依然完全暴露)起来以简化其接口,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值