您的位置:首页 > 编程语言 > Java开发

java 设计模式 工厂模式

2015-07-20 21:17 531 查看
工厂模式:

单例模式:静态工厂方法

类Car 在类内部产生产生对象

写法:

private static Car car=new Car(); //从头到尾都只有一个car

private Car(){} // 把构造方法设为空

public static Car getInstance(){

//这里就可以加上限制条件了。。。就没有直接new car 那么方便了

// if(xxxx){ xxxxx new Car()}

return car;

}

多例模式

写法:

private static List<Car> cars=new ArrayList<>(); // 多连接池

类功能可替换的写法:

申明借口,让类实现接口,

具体写法:

接口 m =new 具体类() // 替换就只要替换这个具体类就好

普通工厂模式:

这个时候的 普通 类的构造方法就是public 了

申明工厂类,只有产生(申明)新对象方法

写法:

工厂类 factory = new 工厂类();

接口 m =factory.产生新对象方法();

可替换生产过程的普通工厂模式:

申明 抽象 生产过程的工厂类,里面只有抽象 接口 申明方法

让所有工厂继承这个抽象 生产过程的工厂类

实现接口 申明方法 ,就是产生新的对象

写法:

抽象 生产过程的工厂类 factory = new 具体工厂类()

接口 m=factory.抽象 接口 申明方法();



抽象工厂:系类产品

申明工厂类,在工厂类里写上产生一系列类对象的方法

写法就是 :

工厂类 factory =new 工厂类()

对象类 对象=factory.对应产生类对象的方法()

但是可以整体替换的情况:

声明一些抽象类 里面只有一个抽象方法,就是某些同类对象所共通的必需实现的方法

申明抽象的 产生对应对象集合工厂类,里面只有多个抽象方法,对应产生上面类对象的抽象方法

所有的“同类型”实体类都必须从相同的抽象类继承

所有的 具体工厂类 必须从 抽象的 产生对应对象集合工厂类 继承,并且 具体工厂类的方法就是返回 实例化对应实体类 的方法

写法:

抽象的 产生对应对象集合工厂类 factory =new 具体工厂类() // 整体替换就只要替换这个具体工厂类就好

抽象类 m=factory.产生上面类对象的抽象方法()

m.同类对象所共通的必需实现的方法

抽象类 n=factory.产生上面类对象的抽象方法()

n.同类对象所共通的必需实现的方法

抽象类 z=factory.产生上面类对象的抽象方法()

z.同类对象所共通的必需实现的方法



普通的工厂 是可以在“产品”的 维度上进行扩展,但如果产品一多,工厂就“泛滥”

抽象工厂在产生新的 “品种” ,改动地方太多,必须要分别在抽象的 产生对应对象集合工厂类 和 抽象类 里加入新的抽象对象

Spring 具体实例化申明对象就直接写在配置文件里了

写法:

自己的 spring 配置文件,不是使用spring框架

在spring.properties文件里写入 VehicleType=com.bjsxt.spring.factory.Car //类对象 配置文件因为在src 目录下,编译后会存到bin目录下,根目录下

接下来在程序里读

Properties props = new Properties();

props.load(Test.class.getClassLoader().getResourceAsStream("com/bjsxt/spring/factory/spring.properties"));

String vehicleTypeName = props.getProperty("VehicleType");

System.out.print(vehicleTypeName);

// 重点来了,把字符串对应的类装载到内存,调用无参数的构造方法 java 反射机制

Object o = Class.forName(vehicleTypeName).newInstance();// 先把类调入内存,然后在用newInstance 方法调用参数为空的构造方法

Movable m = (Movable) o;

m.run();

这里所有的替换就只要替换 配置文件里的内容就好了

spring 框架的写法

配置文件里是<bean id='v' class='类名'>即可

BeanFactory f = new ClassPathXmlApplicationContext("配置文件名。不同于上面的配置文件,这个文件要写在src 目录下");

Object o = f.getBean("v");

Movable m = (Movable) o;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: