应用最广泛的模式-工厂方法模式
2016-06-11 20:34
405 查看
1、工厂方法模式的定义:
定义一个用于创建对象的接口,让子类决定实例化哪个类。
2、通过反射的方式更简洁地来生产具体产品对象:
定义一个用于创建对象的接口,让子类决定实例化哪个类。
/**抽象产品类**/ public abstract class Product{ //产品类的抽象方法 //由具体的产品类去实现 public abstract void method(); }
/**具体产品类A**/ public class ConcreteProductA extends Product{ @Override public void method(){ System.out.println(“我是具体的产品A”); } }
/**具体产品类B**/ public class ConcreteProductB extends Product{ @Override public void method(){ System.out.println(“我是具体的产品B”); } }
/**抽象工厂类**/ public abstract class Factory{ //抽象工厂方法 //具体生产什么由子类去实现 //@return 具体的产品对象 public abstract Product createProduct(); }
/**具体工厂类**/ public class ConcreteFactory extends Factory{ @Override public Product createProduct(){ return new ConcreteProductA(); } }
/**客户类**/ public class Client{ public static void main(String[] args){ Factory factory = new ConcreteFactory(); Product p = factory.createProduct(); p.method(); } }
2、通过反射的方式更简洁地来生产具体产品对象:
/**抽象工厂类**/ public abstract class Factory{ //抽象工厂方法 //具体生产什么由子类去实现 //@param clz 产品对象类类型 //@return 具体的产品对象 public abstract <T extends Product> T createProduct(Class<T> clz); }
/**具体工厂类**/ public class ConcreteFactory extends Factory{ @Override public <T extends Product> T createProduct(Class<T> clz){ Product p = null; try{ p = (Product) Class.forName(clz.getName()).newInstance(); }catch(Exception e){ e.printStackTrace(); } return (T) p; } }
/**客户类**/ public class Client{ public static void main(String[] args){ Factory factory = new ConcreteFactory(); Product p = factory.createProduct(ConcreteProductB.class); p.method(); } }
相关文章推荐
- 单台服务器部署zookeeper集群
- 乐学成语之splash
- iOS中UIWebView的使用详解
- UVa10720
- 【51CTO学院三周年】中年大叔的碎碎念
- OpenGL画点函数
- dobbu入门
- Android基础学习之ArrayAdaptery以及SimpleAdapter的使用
- SQL必知必会(五) 使用视图、使用储存过程、管理事务处理、使用游标、高级SQL特性
- Android—应用程序开机自启
- springMVC RedirectAttributes用法
- 清华组合数学第一章经典复习题,用六种算法计算839647521后999种排列
- hdu 1106 排序
- 首次使用Android Studio应该做的事
- 去除[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platfor
- 【android studio】android studio使用过程中,搜集的一些问题
- storm流程——flume和kafka的连接
- 使用Mybatis向MySQL批量插入数据
- Hadoop 2.6.0集群搭建(伪分布式+分布式)
- 关于ifndef的认识