大话设计模式3 装饰模式 代理模式

1.装饰模式

动态的给对象添加一些额外的职责,把类中的装饰功能移出,以简化原有类。

一个给人穿衣的例子。。人是核心类。。。其他的衣服都只是装饰而已。。

package SimpleFactory;

class Person
{
    public void show(){
        
    }
}

class Finery extends Person
{
    Person person;
    
    public void decorate(Person p)
    {
        person=p;
    }

    @Override
    public void show() {
        // TODO Auto-generated method stub
        if(person!=null)
        {
            person.show();
        }
    }  
}

class Shoes extends Finery
{
    public void show()
    {
        System.out.println("Shoes");
        super.show();
    }
}

class Coat extends Finery
{
    public void show()
    {
        System.out.println("Coat");
        super.show();
    }
}

public class Decorate {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Shoes s=new Shoes();
        s.decorate(new Person());
        Coat c=new Coat();
        c.decorate(s);
        c.show();
    }
}

Head First:

装饰类继承被装饰类的父类,是为了与被装饰类具有同样的接口,使装饰类能够替代被装饰类,而在装饰类中拥有一个被装饰类的引用,用来组合出新的行为。



2.代理模式

在访问一个对象时,不是直接访问,而是通过一个代理进行访问。(废话。。。)

通过这种间接地特性,实现一些功能。。。

一个追求者通过代理送花给Girl的例子。。。

package proxy;

interface IGiveGift
{
	public void gift();
}

class Girl
{
	public String mName;
	public Girl(String name)
	{
		mName=name;
	}
}

class Pursuit implements IGiveGift
{
	Girl mGirl;
	public Pursuit(Girl girl)
	{
		mGirl=girl;
	}
	
	@Override
	public void gift() {
		// TODO Auto-generated method stub
		System.out.println("Gift to:"+mGirl.mName);
	}
	
}

public class Proxy implements IGiveGift{
	Pursuit mPursuit;
	
	public Proxy(Girl girl)
	{
		mPursuit=new Pursuit(girl);
	}

	@Override
	public void gift() {
		// TODO Auto-generated method stub
		mPursuit.gift();
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Proxy proxy=new Proxy(new Girl("Cherry"));
		proxy.gift();
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值