(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
- (6)设计模式:工厂模式
- 设计模式------工厂模式
- 设计模式------工厂模式
- 设计模式 [ 工厂模式 ]
- 设计模式--工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式 工厂模式
- 设计模式-工厂模式
- 设计模式 -- 工厂模式
- 设计模式-工厂模式
- 设计模式----工厂模式
- 设计模式---工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式---工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- Android入门:Activity生命周期
- xib的简单使用
- MySQL创建用户及数据库并赋予其权限
- hdu 2578 Dating with girls(1)(二分查找)
- 初探Activemq
- (6)设计模式:工厂模式
- python中的高等函数初探
- 写在今天的开车教训
- 关于前端的一点思考
- 使用storyboard创建导航控制器以及控制器的生命周期
- LeetCode OJ Minimum Window Substring
- iOS容易造成循环引用的三种场景,就在你我身边!
- 黑马程序员—OC学习笔记—OOP中一个类包含另外一个类的对象
- Object-C中的NSString