您的位置:首页 > 其它

设计模式之工厂方法模式

2015-12-10 11:24 183 查看
模式定义:

定义一个创建产品对象的工厂接口,让子类决定实例化哪一种实例对象。将实际创建实例对象

的工作延迟到子类当中,核心工厂类不再负责具体产品的创建。

工厂方法模式是对简单工厂模式的抽象。好处是可以使系统在不修改工厂角色的情况下引进新

的产品。属于创建型模式。

遵循原则:

开闭原则

依赖倒置

适用场合:

(1)当子类型可能很多,以后需要添加不同的子类实现时;

(2)当一个系统还在设计阶段,还不知道将来需要实例化哪些具体类时;

(3)系统设计之初不需要知道具体对象的概念或者不知道。

知识扩展:

JDK的List、LinkedList、ArrayList就有工厂方法的影子。List返回一个iterator接口

LinkedList、ArrayList返回具体的迭代器。

定义抽象产品

/**

* 定义抽象宝刀

* @author 熊诗言

*

*/

public abstract class AbstractSword {

private String name;

public AbstractSword() {

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}



}

两种具体的宝刀

public class QixingSword extends AbstractSword {

public QixingSword() {

this.setName("七星宝刀");

}



}

public class BaxingSword extends AbstractSword {

public BaxingSword() {

this.setName("八星宝刀");

}



}

定义一个产生产品的工厂接口,生产的产品是抽象的

public interface ISwordFactory {

public AbstractSword createSword();

}

定义两个具体的工厂

public class CaoCao implements ISwordFactory {

@Override

public AbstractSword createSword() {

// TODO Auto-generated method stub

return new QixingSword();

}

}

public class CaoCao2 implements ISwordFactory {

@Override

public AbstractSword createSword() {

// TODO Auto-generated method stub

return new BaxingSword();

}

}

客户端

就可以面向接口编程

public class MainApp {

public static void main(String[] args) {

// ISwordFactory isf = new CaoCao();

// AbstractSword as = isf.createSword();

// System.out.println("曹操使用 "+as.getName()+" 刺杀董卓");

ISwordFactory isf = new CaoCao2();

AbstractSword as = isf.createSword();

System.out.println("曹操2使用 "+as.getName()+" 刺杀董卓");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: