工厂模式
来源:互联网 发布:上海交大矩阵理论作业 编辑:程序博客网 时间:2024/06/06 09:23
1类图
2定义:
一个用于创建对象的接口,让子类决定实例化那个类
3使用场景
- 需要生成复杂的对象。
- 用new就可以创建的对象无需使用工厂模式。
4具体实现
- 1抽象产品类
public abstract class Product { public abstract void method();}
- 2具体产品A类
public class ConcreteProductA extends Product { @Override public void method() { // TODO Auto-generated method stub System.out.println("A"); }}
- 3具体产品B类
public class ConcreteProductB extends Product { @Override public void method() { // TODO Auto-generated method stub System.out.println("B"); }}
- 4抽象工厂类
public abstract class Factory { public abstract Product createProduct(); //public abstract<T extends Product> T createProduct(Class<T> clz);}
- 5具体工厂类
public class ConcreteFactory extends Factory{ @Override public Product createProduct() { // TODO Auto-generated method stub //创建ConcreteProductA(); return new ConcreteProductA(); //return new ConcreteProductB(); }}
- 客户类
public class Client { public static void main(String[] args) { Factory factory = new ConcreteFactory(); Product product = factory.createProduct(); //Product product = factory.createProduct(ConcreteProductB.class); product.method(); }}
5利用反射的方式决定创建那个产品类的实例
- 更改抽象工厂类
public abstract class Factory { //public abstract Product createProduct(); 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) { // TODO Auto-generated method stub Product p = null; try { p = (Product) Class.forName(clz.getName()).newInstance(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return (T)p; }/* @Override public Product createProduct() { // TODO Auto-generated method stub //创建ConcreteProductA(); return new ConcreteProductA(); //return new ConcreteProductB(); }*/}
- 客户类
public class Client { public static void main(String[] args) { Factory factory = new ConcreteFactory(); //Product product = factory.createProduct(); Product product = factory.createProduct(ConcreteProductB.class); product.method(); }}
6每个产品都具体化抽象工厂类
- 创建产品A的具体工厂类
public class ConcreteFactoryA extends Factory { @Override public Product createProduct() { // TODO Auto-generated method stub return new ConcreteProductA(); }}
- 创建产品B的具体工厂类
public class ConcreteFactoryB extends Factory { @Override public Product createProduct() { // TODO Auto-generated method stub return new ConcreteProductB(); }}
- 客户类
public class Client { public static void main(String[] args) { //Factory factory = new ConcreteFactory(); //Product product = factory.createProduct(); //Product product = factory.createProduct(ConcreteProductB.class); //product.method(); Factory factory = new ConcreteFactoryA(); Product productA = factory.createProduct(); productA.method(); }}
阅读全文
0 0
- 工厂模式 -- 工厂方法
- 工厂模式 -- 抽象工厂
- 工厂模式-简单工厂
- 工厂模式-工厂方法
- 工厂模式:静态工厂
- 工厂模式-简单工厂
- 工厂模式-抽象工厂
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-静态工厂
- 工厂模式-抽象工厂
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- EL表达式
- Linux 的文件管理命令
- Codeforces Round #439 (Div. 2)
- Ehcache开启JMX支持
- 2012 NOIP普及组T4 文化之旅
- 工厂模式
- 【末世旅行之Java】HttpClient工具类,包含POST和GET请求,使用了连接池和代理
- Algorithm-week5
- C语言乱码
- 记二次元
- python中用xpath解析网页的基本方法
- CODE FESTIVAL 2017 qual B
- 遗传算法之Python实现
- Java爬虫技术之绕过百度云防护抓取网站内容