常见设计模式
策略设计模式
创建一个能够根据所传递的参数对象的不同而具有不同的行为的方法,这就被称作策略模式。
例子
上面这句话看着玄乎,其实意思很简单,看看下面的代码立刻就明白了
//策略设计模式
public abstract class Person {
public abstract void say();
}
public class Doctor extends Person{
@Override
public void say() {
System.out.println("I like sick......");
}
}
public class Student extends Person{
@Override
public void say() {
System.out.println("I like studying.......");
}
}
public class Architect extends Person{
@Override
public void say() {
System.out.println("I like building.......");
}
}
public class ModelOne {
public void toSay(Person p) {
p.say();
}
public static void main(String[] args) {
ModelOne modelOne = new ModelOne();
modelOne.toSay(new Doctor());
modelOne.toSay(new Architect());
modelOne.toSay(new Student());
}
}
结果:
I like sick…
I like building…
I like studying…
工厂方法设计模式
我们在工厂对象上调用创建方法,由该工厂对象生成接口的某个实现的对象
例子:
//使用工厂方法设计模式来创建一个框架,它可以执行抛硬币和掷骰子功能。
interface Tossing {
boolean event();
}
interface TossingFactory {
Tossing getTossing();
}
class CoinTossing implements Tossing {
private int events;
private static final int EVENTS = 2;
@Override
public boolean event() {
System.out.println("Coin tossing event " + events);
return ++events != EVENTS;
}
}
class CoinTossingFactory implements TossingFactory {
@Override
public CoinTossing getTossing() {
return new CoinTossing();
}
}
class DiceTossing implements Tossing {
private int events;
private static final int EVENTS = 6;
@Override
public boolean event() {
System.out.println("Dice tossing event " + events);
return ++events != EVENTS;
}
}
class DiceTossingFactory implements TossingFactory {
@Override
public DiceTossing getTossing() {
return new DiceTossing();
}
}
public class Exercise {
public static void simulate(TossingFactory fact) {
Tossing t = fact.getTossing();
while(t.event())
;
}
public static void main(String[] args) {
simulate(new CoinTossingFactory());
simulate(new DiceTossingFactory());
}
//代码出自Think in Java