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();
}
}