工厂方法模式
2016-12-25 17:38
190 查看
《Android设计模式》笔记,如有侵权,请联系我删除,谢谢
一。定义
定义一个用于创建对象的借口,让子类决定实例化哪个类
二。使用场景
在任何需要生成复杂对象的地方,都可以使用工厂方法模式。复杂对象适合使用工厂模式,用new就可以完成创建的对象无需使用工厂模式
三。实现
可以利用反射的方式简洁第来生产具体的产品对象,需要在工厂方法的参数列表中传入一个Class类来决定是哪一个产品类。
*****************************************************************************************************************
package com.yinazh.designpattern;
public abstract class Product{
public abstract void method();
}
public class COncreteProductA extends Product{
public void method(){
System.out.println("product A");
}
}
public class COncreteProductB extends Product{
public void method(){
System.out.println("product B");
}
}
public abstract class Factory{
public abstract <T extends Product> T createProduct(Class<T> clz);
}
public class ConcreteFactory extends Factory{
public <T extends Product> T createProduct(Class<T> clz){
Product p = null;
try{
p = (Product)Class.forName(clz.getName()).newInstance();
}catch(Exception e){
e.printStactTrace();
}
return (T)p;
}
}
public class Client{
public static void main(String[] args){
Factory factory = new ConcreteFactory();
Product p = factory.createProduct(COncreteProductA.class);
p.method();
}
}
*****************************************************************************************************************
此时,需要哪一个类,就传入哪个类的类型即可。当有多个工厂时,可以分别实现某个具体的产品;而若只有一个工厂类时,可以将工厂方法改为静态方法。
四。总结
工厂方法模式是完全符合设计原则的,其降低了对象之间的耦合度,而且工厂方法依赖于抽象的架构,其将实例化交由子类去完成,有很好的扩展行。
但是,其缺点也是不可避免的,每次为工厂方法模式添加新的产品时,就要编写一个新的产品类,同事还要引入抽象层,着必然会导致类的结构的复杂化。
一。定义
定义一个用于创建对象的借口,让子类决定实例化哪个类
二。使用场景
在任何需要生成复杂对象的地方,都可以使用工厂方法模式。复杂对象适合使用工厂模式,用new就可以完成创建的对象无需使用工厂模式
三。实现
可以利用反射的方式简洁第来生产具体的产品对象,需要在工厂方法的参数列表中传入一个Class类来决定是哪一个产品类。
*****************************************************************************************************************
package com.yinazh.designpattern;
public abstract class Product{
public abstract void method();
}
public class COncreteProductA extends Product{
public void method(){
System.out.println("product A");
}
}
public class COncreteProductB extends Product{
public void method(){
System.out.println("product B");
}
}
public abstract class Factory{
public abstract <T extends Product> T createProduct(Class<T> clz);
}
public class ConcreteFactory extends Factory{
public <T extends Product> T createProduct(Class<T> clz){
Product p = null;
try{
p = (Product)Class.forName(clz.getName()).newInstance();
}catch(Exception e){
e.printStactTrace();
}
return (T)p;
}
}
public class Client{
public static void main(String[] args){
Factory factory = new ConcreteFactory();
Product p = factory.createProduct(COncreteProductA.class);
p.method();
}
}
*****************************************************************************************************************
此时,需要哪一个类,就传入哪个类的类型即可。当有多个工厂时,可以分别实现某个具体的产品;而若只有一个工厂类时,可以将工厂方法改为静态方法。
四。总结
工厂方法模式是完全符合设计原则的,其降低了对象之间的耦合度,而且工厂方法依赖于抽象的架构,其将实例化交由子类去完成,有很好的扩展行。
但是,其缺点也是不可避免的,每次为工厂方法模式添加新的产品时,就要编写一个新的产品类,同事还要引入抽象层,着必然会导致类的结构的复杂化。
相关文章推荐
- 工厂方法模式和IoC/DI的关系
- Head First Java 设计模式——工厂方法模式
- 设计模式(2):工厂方法模式
- 工厂模式(简单工厂模式, 工厂方法模式, 抽象工厂模式)一
- 简单工厂(可配置的工厂类)和工厂方法模式以及抽象工厂
- 工厂方法模式
- 工厂方法模式(Factory Method Pattern)
- 工厂方法模式
- java 工厂方法模式
- 设计模式:工厂方法模式(Factory Method)
- 工厂方法模式
- Php设计模式之工厂模式(二)【工厂方法模式 Factory Method】
- 设计模式(四) ---- 工厂方法模式
- 工厂方法模式
- 工厂方法模式(Factory Method Pattern)
- 工厂方法模式 - 程序实现(java)
- java设计模式---工厂方法模式
- 设计模式——简单工厂模式—工厂方法模式—抽象工厂模式(比较)
- java设计模式--工厂方法模式
- 简单工厂模式,工厂方法模式及抽象工厂模式比较