1,简单工厂
工厂模式,简单的说就是一个对象的产生原来是自己通过new关键字自己构造出来的,现在通过一个方法,来管理对象的产生的过程,需要这个对象的时候,想这个方法要,这个方法就是一个工厂.
- 第一个类
- package com.soukenan.factory;
- //产品类
- public class Product {
- }
第二个类:工厂类
- package com.soukenan.factory;
- //工厂类
- public class Factory {
- //工厂方法
- public static Product createProduct(){
- return new Product();
- }
- }
简单工厂模式的应用
- package com.soukenan.factory;
- public class Main {
- public static void main(String[] args) {
- //原来需要用到类Product的时候,通过new关键字直接构造一个Product的对象
- Product p = new Product();
- //这个是应用的工厂模式,将Product的对象的产生交给了一个工厂(方法)来管理
- //增加的程序的可扩展性
- Product p2 = Factory.createProduct();
- }
- }
在这里涉及到一个单例和多例的概念,单例就是说当你从工厂中取对象的时候,取到的都是同一个对象,多例的意思就是说当你从工厂中取对象的时候取的都是新的对象。
数据库连接池就是用到了多例的工厂模式
- package com.soukenan.factory;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Random;
- //工厂类
- public class Factory {
- private static Product p = new Product();
- private static List<Product> products = new ArrayList<Product>();
- //应用单例的工厂方法
- public static Product createProduct(){
- return p;
- }
- //应用多例的工厂方法
- public static Product getProduct(){
- //这里从products集合里取出一个Product对象来 这里模拟随机取出一个
- Random r =new Random();
- int i = r.nextInt();
- return products.get(i);
- }
- }
2,应用了多态的工厂模式
增加的功能:工厂可以生产产品
产品接口
- package com.soukenan.polymorphicfactory;
- public interface Product {
- //一些列的方法
- }
产品A
- package com.soukenan.polymorphicfactory;
- public class ProductA implements Product {
- }
产品B
- package com.soukenan.polymorphicfactory;
- public class ProductB implements Product {
- }
工厂接口
- package com.soukenan.polymorphicfactory;
- public interface Factory {
- Product createProduct();
- }
生产产品A的工厂
- package com.soukenan.polymorphicfactory;
- public class FactoryA implements Factory {
- @Override
- public Product createProduct() {
- return new ProductA();
- }
- }
生产产品B的工厂
- package com.soukenan.polymorphicfactory;
- public class FactoryB implements Factory {
- @Override
- public Product createProduct() {
- return new ProductB();
- }
- }
工厂的应用
- package com.soukenan.polymorphicfactory;
- public class Main {
- public static void main(String[] args) {
- //这里应用了多态的工厂,需要生产其他的产品,只需要换掉实现类即可
- // Factory factory = new FactoryB();
- Factory factory = new FactoryA();
- factory.createProduct();
- }
- }
转载于:https://blog.51cto.com/soukenan/1059833