(6)设计模式:工厂模式

来源:互联网 发布:红包源码 编辑:程序博客网 时间:2024/06/02 11:18

设计模式:工厂模式

spring: IOC和AOP

IOC:面向接口(抽象)编程,不是面向具体编程

xml解析: DOM, JDOM, DOM4J, SAX

1.普通工厂模式

普通工厂:可以在产品的维度上扩展,每种产品都new一个新工厂,会产生工厂泛滥的现象

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

package com.bjsxt.dp.factory;public class BroomFactory extends VehicleFactory{public Moveable create() {return new Broom();}}

package com.bjsxt.dp.factory;import java.util.ArrayList;import java.util.List;public class Car implements Moveable{private static Car car = new Car();//private static List<Car> cars = new ArrayList<Car>();public Car(){}public static Car getInstance() {return car;}public void run() {System.out.println("冒着烟奔跑中car.......");}}

package com.bjsxt.dp.factory;public class CarFactory extends VehicleFactory{public Moveable create() {return new Car();}}


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


package com.bjsxt.dp.factory;public class Plane implements Moveable {@Overridepublic void run() {System.out.println("扇着翅膀前进中plane....");}}


package com.bjsxt.dp.factory;public class PlaneFactory extends VehicleFactory{public Moveable create() {return new Plane();}}


package com.bjsxt.dp.factory;public abstract class VehicleFactory {abstract Moveable create();}

package com.bjsxt.dp.factory;public class Test {public static void main(String[] args) {//Car c = Car.getInstance();//Car c2 = Car.getInstance();VehicleFactory factory = new BroomFactory();Moveable m = factory.create();//if(c == c2) System.out.println("same car");m.run();}}

2.抽象工厂模式

抽象工厂:可以在产品系列的维度上扩展,可以解决工厂泛滥的现象,在产生新的工厂品种的时候,改动也很多。

package com.bjsxt.dp.factory.abstractfactory;public abstract class AbstractFactory {public abstract Vehicle createVehicle();public abstract Weapon createWeapon();public abstract Food createFood();}


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


package com.bjsxt.dp.factory.abstractfactory;public class Apple extends Food {public void printName() {System.out.println("apple");}}

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


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

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();}}

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

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();}}

package com.bjsxt.dp.factory.abstractfactory;public class MagicStick extends Weapon {@Overridepublic void shoot() {System.out.println("fire hu hu hu ...");}}

package com.bjsxt.dp.factory.abstractfactory;public class MushRoom extends Food {@Overridepublic void printName() {// TODO Auto-generated method stubSystem.out.println("mushroom");}}

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

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


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

3.通过配置文件实现工厂模式(JDOM)


sample.xml

<?xml version="1.0" encoding="UTF-8"?><HD> <disk name="C">  <capacity>8G</capacity>  <directories>200</directories>  <files>1580</files> </disk> <disk name="D">   <capacity>10G</capacity>  <directories>500</directories>  <files>3000</files>  </disk></HD>

import java.util.*;import org.jdom.*;import org.jdom.input.SAXBuilder;import org.jdom.xpath.XPath;public class Sample2 {   public static void main(String[] args) throws Exception {  SAXBuilder sb = new SAXBuilder();  Document doc = sb.build(Sample2.class.getClassLoader().getResourceAsStream("sample.xml"));  Element root = doc.getRootElement();  System.out.println(root);  List list = XPath.selectNodes(root, "/HD/disk");  System.out.println(list.size());  for (int i = 0; i > list.size(); i++) {    Element disk_element = (Element) list.get(i);   String name = disk_element.getAttributeValue("name");   String capacity = ( (Text) XPath.selectSingleNode(disk_element,     "//disk[@name='" + name + "']/capacity/text()")).getTextNormalize();   String directories = ( (Text) XPath.selectSingleNode(disk_element,      "//disk[@name='" + name + "']/directories/text()")).getTextNormalize();   String files = ( (Text) XPath.selectSingleNode(disk_element,      "//disk[@name='" + name + "']/files/text()")).getTextNormalize();   System.out.println("磁盘信息:");   System.out.println("分区盘符:" + name);   System.out.println("分区容量:" + capacity);   System.out.println("目录数:" + directories);   System.out.println("文件数:" + files);   System.out.println("-----------------------------------");  } }}









0 0
原创粉丝点击