设计模式_抽象工厂模式
来源:互联网 发布: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
- Java设计模式_抽象工厂模式
- 大话设计模式_抽象工厂模式
- 设计模式_抽象工厂模式
- 设计模式03_抽象工厂模式
- 设计模式04_抽象工厂模式
- 设计模式_抽象工厂模式
- 设计模式05_抽象工厂模式
- java设计模式_抽象工厂模式
- 设计模式_抽象工厂模式(4)
- Java设计模式_(创建型)_抽象工厂模式
- java基础_设计模式_抽象工厂模式
- java设计模式03_抽象工厂模式
- 移动架构06_设计模式二:抽象工厂模式
- 抽象工厂设计模式
- 设计模式-----抽象工厂
- 抽象工厂设计模式
- 抽象工厂设计模式
- 抽象工厂设计模式
- Xcode提示“expression is not assignable”
- IntelliJ IDEA 12创建Maven管理的Java Web项目(图解)
- 关于拼接引号的问题
- android--将editText中提示文字放到右边且不消失的简单做法
- android 中从一个activity 跳转到另外一个activity
- 设计模式_抽象工厂模式
- css 书写规范
- Jquery 中 ajaxSubmit使用讲解
- APP界面设计指南|APP界面设计师必备信息图
- android 休眠锁
- MySql中代替Oracle的instr方法
- 云来轻app:未来支付场景的畅想
- 输出各班各科成绩最高的同学?输出各科成绩最高的同学?
- 通过java调用VBS,再用VBS执行Excel中的宏的例子