客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。 消费者无须修改就可以接纳新产品。 缺点是当产品修改时,工厂类也要做相应的修改。 设计模式之FACTORY METHOD -工厂方法模式生活例子:
追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基, 只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory(工厂) public class Factory{ public static Sample creator(int which){ //getClass 产生Sample 一般可使用动态类装载装入类。
if (which==1)
return new SampleA();
else if (which==2)
return new SampleB(); } } 核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。 请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。 核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。 public abstract class Factory{ public abstract Sample creator(); public abstract Sample2 creator(String name); }//工厂抽象类 public class SimpleFactory extends Factory{ public Sample creator(){
.........
return new SampleA
} public Sample2 creator(String name){
.........
return new Sample2A
} }//一个类继承这个父类 其实实现功能的是继承父工厂抽象类的子类中的方法 public class BombFactory extends Factory{ public Sample creator(){
......
return new SampleB
} public Sample2 creator(String name){
......
return new Sample2B
} }
|