设计模式_抽象工厂模式
2014-03-11 14:23
190 查看
系列产品(车、武器、食品补给……)
Vehicle.java
Weapon.java
Food.java
Car.java
Broom.java
AK47.java
MagicStick.java
DefaultFactory.java
MagicFactory.java
Test.java
简单工厂产生产品系列很麻烦,工厂泛滥
抽象工厂在产生新的产品品种的时候,改动的太多
理解Spring的Bean工厂
applicationContext.xml
Moveable.java
Car.java
Train.java
BeanFactory.java
ClassPathXmlApplicationContext.java
Test.java
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 { @Override public 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 { @Override public void printName() { // TODO Auto-generated method stub System.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{ @Override public Food createFood() { // TODO Auto-generated method stub return new Apple(); } @Override public Vehicle createVehicle() { // TODO Auto-generated method stub return new Car(); } @Override public Weapon createWeapon() { // TODO Auto-generated method stub return new AK47(); } }
MagicFactory.java
package com.bjsxt.dp.factory.abstractfactory; public class MagicFactory extends AbstractFactory { @Override public Food createFood() { // TODO Auto-generated method stub return new MushRoom(); } @Override public Vehicle createVehicle() { // TODO Auto-generated method stub return new Broom(); } @Override public Weapon createWeapon() { // TODO Auto-generated method stub return 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{ @Override public 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); } } @Override public 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(); } }
相关文章推荐
- 《您的设计模式》(CBF4LIFE)之“抽象工厂模式”【整理】
- 设计模式你怎么看?--抽象工厂模式
- 设计模式学习笔记(3) - 抽象工厂模式
- 批注:C++设计模式——抽象工厂模式:横向扩展
- 设计模式之四 抽象工厂模式
- 设计模式---抽象工厂模式
- java设计模式---抽象工厂模式
- 设计模式之 抽象工厂模式 Factory
- 设计模式——抽象工厂模式
- 【2】设计模式之抽象工厂模式(AbstractFactory)
- 设计模式实例-抽象工厂模式
- 设计模式-抽象工厂模式
- 23种设计模式(3):抽象工厂模式
- JAVA设计模式——工厂方法模式和抽象工厂模式
- Java设计模式圣经连载(03)-抽象工厂模式
- Java设计模式之抽象工厂模式
- java设计模式之创建型模式-抽象工厂模式
- JAVA设计模式之抽象工厂模式
- java学习笔记-设计模式4(抽象工厂模式)
- java设计模式2--抽象工厂模式(Abstract Factory)