设计模式四之工厂模式1
从学习设计模式以来,一直强调接口编程,依赖抽象而不是具体,但是每次看到new出新的对象,是不是就会有些疑问呢?怎么会这样,难道只能这样吗?似乎java中只提供了这种从类中生成对象的方式,不用怀疑,java确实只有这种基础的生成对象的方式,但是我们可以抽象它,使我们的调用代码在更高级的层面上来生成对象,根据不同的业务需求来获取对象。
工厂模式有三种,一种是简单工厂,再有一种是工厂方法,最后一种是抽象工厂。
简单工厂一般都写成静态工厂,如下,
package com.csshu.simple; /** * 工厂类代码,仅仅是简答的根据条件来生成代码,最后返回一个对象 * @author shujianhua * */ public class Simeple { private static Pizza pizza; public static Pizza create(String type){ if (type.equals("1")){ pizza = new Pizza1(); } else if (type.equals("2")){ pizza = new Pizza2(); }else if (type.equals("3")){ pizza = new Pizza3(); }else if (type.equals("4")){ pizza = new Pizza4(); }else if (type.equals("5")){ pizza = new Pizza5(); }else if (type.equals("6")){ pizza = new Pizza6(); } return pizza; } } package com.csshu.simple; public class Pizza { public void speak(){ System.out.println("i am a pizza parent"); } } package com.csshu.simple; public class Pizza1 extends Pizza{ @Override public void speak() { System.out.println("1"); } } package com.csshu.simple; public class Test { public static void main(String[] args) { Pizza pizza = Simeple.create("1"); pizza.speak(); } }
如上,即为简单工厂的方法,因为一般写作静态类,所以不能继承,不能通过子类改变方法。
工厂方法稍做一步抽象,将生成推向推迟到子类中生成。
抽象工厂,主要作用在于对大量的对象的集合,主要是对象方面的。
工厂方法和抽象工厂待续---