java设计模式-工厂系列
一、简单工厂
1.背景:
任意定制交通工具的类型和生产过程
代码:
Moveable.java
package com.cy.dp.factory;public interface Moveable {void run(); }
Car.java:
package com.cy.dp.factory;public class Car implements Moveable{@Overridepublic void run(){System.out.println("car running...");}}
View Code
Plane:
package com.cy.dp.factory;public class Plane implements Moveable{@Overridepublic void run() {System.out.println("plane running...");}}
View Code
VehicleFactory.java:
package com.cy.dp.factory;/*** 交通工具工厂* @author CY**/ public abstract class VehicleFactory {abstract Moveable create(); }
CarFactory:
package com.cy.dp.factory;public class CarFactory extends VehicleFactory{@OverrideMoveable create() {return new Car();} }
View Code
PlaneFactory:
package com.cy.dp.factory;public class PlaneFactory extends VehicleFactory{@OverrideMoveable create() {return new Plane();} }
View Code
Test测试类:
package com.cy.dp.factory;public class Test {public static void main(String[] args) {VehicleFactory factory = new CarFactory();Moveable m = factory.create();m.run();} }
View Code
二、抽象工厂
package com.cy.dp.factory;//交通工具 public abstract class Vehicle {abstract void run(); }
View Code
Weapon:
package com.cy.dp.factory;//武器 public abstract class Weapon {abstract void shoot(); }
View Code
Food:
package com.cy.dp.factory;//食物 public abstract class Food {abstract void printName(); }
View Code
Car:
package com.cy.dp.factory;public class Car extends Vehicle{public void run(){System.out.println("car running...");}}
View Code
AK47:
package com.cy.dp.factory;public class AK47 extends Weapon{public void shoot(){System.out.println("shooting...");} }
View Code
Apple:
package com.cy.dp.factory;public class Apple extends Food{public void printName(){System.out.println("apple");} }
View Code
AbstractFactory:
package com.cy.dp.factory;public abstract class AbstractFactory {abstract Vehicle createVehicle();abstract Weapon createWeapon();abstract Food createFood(); }
DefaultFactory:(默认工厂,生产汽车、AK47、苹果)
package com.cy.dp.factory;public class DefaultFactory extends AbstractFactory{@OverrideVehicle createVehicle() {return new Car();}@OverrideWeapon createWeapon() {return new AK47();}@OverrideFood createFood() {return new Apple();} }
Test:
package com.cy.dp.factory;public class Test {public static void main(String[] args) {AbstractFactory f = new DefaultFactory();Vehicle v = f.createVehicle();v.run();Weapon w = f.createWeapon();w.shoot();Food a = f.createFood();a.printName();} }
View Code
抽奖工厂好处:
package com.bjsxt.spring.factory;public interface BeanFactory {Object getBean(String id); }
ClassPathXmlApplicationContext:
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);}}
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>
Car:
package com.bjsxt.spring.factory;public class Car implements Moveable{public void run() {System.out.println("car running.......");} }
View Code
Test测试类:
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();}}
转载于:https://www.cnblogs.com/tenWood/p/9169324.html
java设计模式-工厂系列相关推荐
- java备忘录模式应用场景_图解Java设计模式之备忘录模式
图解Java设计模式之备忘录模式 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态. ...
- JAVA 设计模式 模板方法模式
定义 模板方法模式 (Template Method) 定义了一个操作中的算法的骨架,而将部分步骤的实现在子类中完成. 模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模 ...
- Java设计模式之策略模式与状态模式
一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...
- JAVA 设计模式 享元模式
用途 享元模式 (Flyweight) 运用共享技术有效地支持大量细粒度的对象. 享元模式是一种结构型模式. 结构 图-享元模式结构图 Flyweight : 它是所有具体享元类的超类或接口,通过这个 ...
- java设计模式 观察者模式_理解java设计模式之观察者模式
在生活实际中,我们经常会遇到关注一个事物数据变化的情况,例如生活中的温度记录仪,当温度变化时,我们观察它温度变化的曲线,温度记录日志等.对于这一类问题,很接近java设计模式里面的"观察者模 ...
- Java设计模式-七大设计原则
Java设计模式 设计模式七大原则 设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好 代码 ...
- Java设计模式(备忘录模式-解释器模式-状态模式-策略模式-职责链模式)
Java设计模式Ⅶ 1.备忘录模式 1.1 备忘录模式概述 1.2 代码理解 2.解释器模式 2.1 解释器模式概述 3.状态模式 3.1 状态模式概述 3.2 代码理解 4.策略模式 4.1 策略模 ...
- Java设计模式(访问者模式-迭代器模式-观察者模式-中介者模式)
Java设计模式Ⅶ 1.访问者模式 1.1 访问者模式概述 1.2 代码理解 2.迭代器模式 2.1 迭代器模式概述 2.2 代码理解 3.观察者模式 3.1 观察者模式概述 3.2 代码理解 4.中 ...
- Java设计模式(代理模式-模板方法模式-命令模式)
Java设计模式Ⅴ 1.代理模式 1.1 代理模式概述 1.2 静态代理 1.2.1 静态代理概述 1.2.2 代码理解 1.3 动态代理之JDK代理 1.3.1 动态代理之JDK代理概述 1.3.2 ...
最新文章
- 观看5万个游戏视频后,英伟达AI学会了自己开发「吃豆人」
- python3 sys.stdout.write 实时打印刷新
- 深入理解css优先级
- android 将图片路径转二进制,将图像转换为二进制图像中的android
- how pwm update
- Linux 启动、关闭、重启网络服务的两种方式
- 创造需求的6个关键点
- CVPR官网不堪重负,挂了 | 最佳论文、人生赢家、六千余人参会
- 解决SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的访问...
- 如何以编程方式确定Java中的操作系统?
- 耿建超英语语法---连词
- GalGame汉化教程(一)——Ollydbg修改编码和字体
- mysql5_MySQL5.5下载-MySQL数据库5.5下载 v5.5.60.1官方版(32位/64位)--pc6下载站
- 浏览器播放语音SpeechSynthesisUtterance
- 【 微软 2023校园招聘倒计时3天】
- 游戏多开计算机内存不足,技术宅 解决天刀多开单开内存不足问题
- 宏基因组网络分析工具MetagenoNets
- 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——1.8 域和指示器概述...
- Solidworks快速装配——带配合装配与阵列装配(带例子解释)
- 大学计算机实验图灵机模型与计算机硬件,北理大学计算机实验基础 实验一_图灵机模型与计算机硬件系统虚拟拆装-实验报告.doc...
热门文章
- python 取模_中年大叔学编程-Python的基础语法和运算符
- docx文档怎么排列图片_PDF怎么转Word?这几款软件满足你的要求
- 30天试用期到了_如何战胜被天气支配的恐惧?洗衣干衣不用看“天”,国美干衣机免费等你试!...
- 社区发现(二)--GN
- Windows10下VB6.0开发——常用的字符串处理函数工具
- python3 读写json文件,python3没有读取JSON文件righ
- 域名和IP地址并用的理由
- spark DataSet与DataFrame的区别
- 网易云音乐api资料
- YII with()