浅谈策略模式

策略模式

需求:

Boss提出一个新的需求:他要参加一个相亲,约了A B C三个姑娘,Boss针对不同面容的姑娘有不同的语言行为.
我大致分为:漂亮/一般/难看,”你好,~”, "沉默", "转身走"
为了Boss的相亲可以高效率,我需要写一段程序:


A B C 共有一个属性女人,则创建一个抽象的父类:Woman.java
public abstract class Wonman{
private String name;
public Wonman(String name) {
this.name = name;
}
abstract void behavior();
} 

创建子类:Beautiful.java Common.java Ugly.java 继承Woman.java
public class Beautiful extends Woman {
public Beautiful(String name) {
super(name);
}

    @Override
    public void behavior() {
        System.out.println("你好, 美女!");
    }
}

  ...其他两个类似.
public class Boss{

    public static void main(String args[]) {
        System.out.println("相亲开始 ...");
        Beautiful beautiful = new Beautiful("美女");
        behavior(beautiful);
    }

    public static void behavior(Wonman wonman) {
        woman.behavior();
    }
}

*  
** 针对这个实现,感觉很不错, 后期Boss见的越来越多,不再只是三种,又有气质好的/大长腿的/..
.你需要每次都建一个类并给一种行为吗? 何况Boss比较干练只有三种行为.
为何不思考一个策略: 只有三个行为,建三个行为类:试试如何**

public interface Strategy {
    void behavior();
}

public class Woman {
    private String name;

    public Woman(String name) {
        this.name = name;
    }

    public void setBehavior(Strategy strategy) {
        strategy.behavior();
    }
}

public class Beautiful extends Woman {
    public Beautiful(String name) {
        super(name);
        setBehavior(new SayHelloStrategy());
    }
}

...

public class SayHelloStrategy implements Strategy{
    void behavior() {
        System.out.println("你好, 美女");
    }
}

...

  public class Boss {
public static void main(String args[]) {
System.out.println(“相求开始 ...”);
      Beautiful beautify = new Beautiful(“美女”);
}
}


从表面上看,前者更好理解而且好少写一个类文件,但是,如果你想后期来了很多气质妹子 贤惠的妹子
Boss的行为没变,你只需要再增加一个Graceful.java 不用再写 print..
从直观上看,这不就实现了code 复用吗?

看了几篇博文,有些自己的感觉,写个笔记, 刚开始仍需要多琢磨 ...

~
~

你可能感兴趣的:(编程模式)