设计模式_抽象工厂模式

来源:互联网 发布:access2007数据库安装 编辑:程序博客网 时间:2024/05/16 17:12

系列产品(车、武器、食品补给……)


Vehicle.java

package com.bjsxt.dp.factory.abstractfactory;public abstract class Vehicle {public abstract void run();}

Weapon.java

package com.bjsxt.dp.factory.abstractfactory;public abstract class Weapon {public abstract void shoot();}

Food.java

package com.bjsxt.dp.factory.abstractfactory;public abstract class Food {public abstract void printName();}

Car.java

package com.bjsxt.dp.factory.abstractfactory;public class Car extends Vehicle {public void run() {System.out.println("冒着烟奔跑中car.......");}}

Broom.java

package com.bjsxt.dp.factory.abstractfactory;public class Broom  extends Vehicle{public void run() {System.out.println("一路沙尘暴飞奔而来broom.....");}}

AK47.java

package com.bjsxt.dp.factory.abstractfactory;public class AK47 extends Weapon{public void shoot() {System.out.println("哒哒哒...");}}

MagicStick.java

package com.bjsxt.dp.factory.abstractfactory;public class MagicStick extends Weapon {@Overridepublic void shoot() {System.out.println("fire hu hu hu ...");}}
Apple.java
package com.bjsxt.dp.factory.abstractfactory;public class Apple extends Food {public void printName() {System.out.println("apple");}}
MushRoom.java
package com.bjsxt.dp.factory.abstractfactory;public class MushRoom extends Food {@Overridepublic void printName() {// TODO Auto-generated method stubSystem.out.println("mushroom");}}
AbstractFactory.java
package com.bjsxt.dp.factory.abstractfactory;public abstract class AbstractFactory {public abstract Vehicle createVehicle();public abstract Weapon createWeapon();public abstract Food createFood();}

DefaultFactory.java

package com.bjsxt.dp.factory.abstractfactory;public class DefaultFactory extends AbstractFactory{@Overridepublic Food createFood() {// TODO Auto-generated method stubreturn new Apple();}@Overridepublic Vehicle createVehicle() {// TODO Auto-generated method stubreturn new Car();}@Overridepublic Weapon createWeapon() {// TODO Auto-generated method stubreturn new AK47();}}

MagicFactory.java

package com.bjsxt.dp.factory.abstractfactory;public class MagicFactory extends AbstractFactory {@Overridepublic Food createFood() {// TODO Auto-generated method stubreturn new MushRoom();}@Overridepublic Vehicle createVehicle() {// TODO Auto-generated method stubreturn new Broom();}@Overridepublic Weapon createWeapon() {// TODO Auto-generated method stubreturn new MagicStick();}}

Test.java

package com.bjsxt.dp.factory.abstractfactory;public class Test {public static void main(String[] args) {//DefaultFactory f = new DefaultFactory();//AbstractFactory f = new DefaultFactory();AbstractFactory f = new  MagicFactory();Vehicle v = f.createVehicle();v.run();Weapon w = f.createWeapon();w.shoot();Food a = f.createFood();a.printName();}}

    简单工厂产生产品系列很麻烦,工厂泛滥

    抽象工厂在产生新的产品品种的时候,改动的太多

 

理解Spring的Bean工厂

  applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?><beans>  <bean id="v" class="com.bjsxt.spring.factory.Train">  </bean>    <!--  //v=com.bjsxt.spring.factory.Car  --></beans>

Moveable.java

package com.bjsxt.spring.factory;public interface Moveable {void run();}

Car.java

package com.bjsxt.spring.factory;public class Car implements Moveable{public void run() {System.out.println("冒着烟奔跑中car.......");}}

Train.java

package com.bjsxt.spring.factory;public class Train implements Moveable{@Overridepublic void run() {System.out.println("小火车呜呜呜");}}

BeanFactory.java

package com.bjsxt.spring.factory;public interface BeanFactory {Object getBean(String id);}

ClassPathXmlApplicationContext.java

package com.bjsxt.spring.factory;import java.util.HashMap;import java.util.List;import java.util.Map;import org.jdom.Document;import org.jdom.Element;import org.jdom.input.SAXBuilder;import org.jdom.xpath.XPath;public class ClassPathXmlApplicationContext implements BeanFactory  {private Map<String, Object> container = new HashMap<String, Object>();public ClassPathXmlApplicationContext(String fileName) throws Exception{SAXBuilder sb = new SAXBuilder();  Document doc = sb.build(this.getClass().getClassLoader()  .getResourceAsStream(fileName));  Element root = doc.getRootElement();  List list = XPath.selectNodes(root, "/beans/bean");  System.out.println(list.size());    for (int i = 0; i < list.size(); i++) {    Element bean = (Element) list.get(i);   String id = bean.getAttributeValue("id");   String clazz = bean.getAttributeValue("class");   Object o = Class.forName(clazz).newInstance();   container.put(id, o);   System.out.println(id + " " + clazz);  }}@Overridepublic Object getBean(String id) {return container.get(id);}}

Test.java

package com.bjsxt.spring.factory;import java.io.IOException;import java.util.Properties;public class Test {/** * @param args * @throws IOException  */public static void main(String[] args) throws Exception {BeanFactory f = new ClassPathXmlApplicationContext("com/bjsxt/spring/factory/applicationContext.xml");Object o = f.getBean("v");Moveable m = (Moveable)o;m.run();}}








 

0 0
原创粉丝点击