创建型模式之工厂方法模式(FactoryMethod)
2014-12-08 18:16
344 查看
工厂方法模式:
又叫虚拟构造(virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式。它的正式定义为:工厂方法模式定义一个创建对象的接口,
但是由子类决定要实例化的类是哪一个,工厂方法让类的实例化推迟到了子类。
工厂方法模式结构有:抽象工厂,具体工厂,抽象产品,具体产品组成。
抽象工厂是工厂方法模式的核心,它是与应用程序无关,任何在模式中创建对象的工厂类必须实现这一个接口。在实际的系统中,这个角色也常常用Java抽象类实现。
具体工厂是实现抽象工厂的Java类实现。
抽象产品是工厂方法模式创建的对象的超类,也就是产品对象共同的父类或共同拥有的接口。
具体产品是实现抽象产品角色所声明的接口。
意图:定义一个用于创建对象的接口,并控制返回哪个对象的实例。让服务的提供者确定实例化哪个类,而不是客户端。在Java类库中极为常见,比如Collection
中的iterator()方法。
优势:
在开发的过程中,工厂方法通过使用产品的接口去实现功能,并且其实现任务可以延迟到子类中完成。
添加新产品无需修改接口;
隔断了客户端和具体产品的依赖关系,提高了产品的可扩展性。
应用场所:
当客户端程序不了解调用几个类进行实例化时,可以用工厂方法模式建立一个接口,用于控制一些类进行实例化。
当父类考虑使用子类去实例化对象时,
当一个类不清楚它需要建立的对象类时,可以用子类来实现。
与spring:
spring框架的factoryBean接口体现了工厂方法模式应用。
factoryBean是抽象工厂,ProxyFactoryBean、TimerFactoryBean是具体工厂。
Object是抽象产品,AopObject、Timer是具体产品。
实例:比如某公司即在生产上提出技术革新,又能尽职尽责。因此,被两次评为先进个人。
抽象工厂---公司
具体工厂--公司表扬1
具体工厂---公司表扬2
抽象产品--员工
具体产品--表扬1
又叫虚拟构造(virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式。它的正式定义为:工厂方法模式定义一个创建对象的接口,
但是由子类决定要实例化的类是哪一个,工厂方法让类的实例化推迟到了子类。
工厂方法模式结构有:抽象工厂,具体工厂,抽象产品,具体产品组成。
抽象工厂是工厂方法模式的核心,它是与应用程序无关,任何在模式中创建对象的工厂类必须实现这一个接口。在实际的系统中,这个角色也常常用Java抽象类实现。
具体工厂是实现抽象工厂的Java类实现。
抽象产品是工厂方法模式创建的对象的超类,也就是产品对象共同的父类或共同拥有的接口。
具体产品是实现抽象产品角色所声明的接口。
意图:定义一个用于创建对象的接口,并控制返回哪个对象的实例。让服务的提供者确定实例化哪个类,而不是客户端。在Java类库中极为常见,比如Collection
中的iterator()方法。
优势:
在开发的过程中,工厂方法通过使用产品的接口去实现功能,并且其实现任务可以延迟到子类中完成。
添加新产品无需修改接口;
隔断了客户端和具体产品的依赖关系,提高了产品的可扩展性。
应用场所:
当客户端程序不了解调用几个类进行实例化时,可以用工厂方法模式建立一个接口,用于控制一些类进行实例化。
当父类考虑使用子类去实例化对象时,
当一个类不清楚它需要建立的对象类时,可以用子类来实现。
与spring:
spring框架的factoryBean接口体现了工厂方法模式应用。
factoryBean是抽象工厂,ProxyFactoryBean、TimerFactoryBean是具体工厂。
Object是抽象产品,AopObject、Timer是具体产品。
实例:比如某公司即在生产上提出技术革新,又能尽职尽责。因此,被两次评为先进个人。
抽象工厂---公司
public interface ICompany { Person createPerson(); }
具体工厂--公司表扬1
public class PraiseOneCompany implements ICompany { public Person createPerson() { reuturn new PraiseOne(); } }
具体工厂---公司表扬2
public class PraiseTwoCompany implements ICompany { public Person createPerson() { return new PraiseTwo(); } }
抽象产品--员工
public interface Person { public void skillOne(); public void skillTwo(); public void industry(); }
具体产品--表扬1
public class praiseOne implements Person { public void skillOne() { // } public void skillTwo() { // } public void industry() { // } }具体产品--表扬2
public class praiseTwo implements Person { public void skillOne() { // } public void skillTwo() { // } public void industry() { // } }测试类
public class TestClient { ICompany oneCompany = new PraiseOneCompany(); Person personeOne = oneCompany.createPerson(); System.out.println("jerry:"+personeOne.skillOne()+" \n"+personeOne.skillTwo()+"\n"+personeOne.industry()); ICompany twoCompany = new PraiseTwoCompany(); Person personeTwo = twoCompany.createPerson(); System.out.println("tom:"+personeTwo.skillOne()+" \n"+personeTwo.skillTwo()+"\n"+personeTwo.industry()); }
相关文章推荐
- JAVA设计模式(01):创建型-工厂模式【工厂方法模式】(Factory Method)
- 一、创建型模式:工厂方法模式(Factory Method)
- 设计模型之创建型模式之工厂方法模式(Factory Method)
- 设计模式(2)の创建型の工厂方法模式(Factory Method)の多个工厂方法模式
- (创建型模式)Factory Method——工厂方法模式
- 设计模式学习(创建型模式)—工厂方法模式(Factory Method)
- JAVA设计模式(01_1):创建型-工厂模式【工厂方法模式】(Factory Method)
- [导入]C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式).zip(10.09 MB)
- Java经典设计模式-创建型模式-工厂方法模式(Factory Method)
- 设计模式(3)の创建型の工厂方法模式(Factory Method)の静态工厂方法模式
- 笔记5:Factory Method 工厂方法模式(创建型模式)
- JAVA设计模式(01):创建型-工厂模式【工厂方法模式】(Factory Method)
- JAVA设计模式(24):创建型-工厂模式【工厂方法模式】(Factory Method)
- 设计模式(1)の创建型の工厂方法模式(Factory Method)の(普通|简单)工厂模式
- 工厂方法模式(Factory Method)(对象创建型模式)
- C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式)
- 四.创建型设计模式——Factory Method Pattern(工厂方法模式)
- JAVA设计模式(1) —<创建型>工厂方法模式(Factory Method)
- Factory Method 工厂方法模式(创建型模式)
- Java设计模式(2)——创建型模式之工厂方法模式(Factory Method)