创建型模式包括以下5种:
FactoryMethod ( 工厂方法)
AbstractFactory ( 抽象工厂)
Singleton ( 单态模式 )
Builder ( 建造者模式 )
Prototype 原型模式 )
设计模式之一: 工厂方法
定义:一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到了其子类。
适用性:
1> 当客户程序不需要知道要使用对象的创建过程。
2> 客户程序使用的对象存在变动的可能,或者根本就不知道使用哪一个具体的对象。
参与者
1.Product 定义工厂方法所创建的对象的接口。
2.ConcreteProduct 具体的Product,实现Product接口。
3.Creator 声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。可以调用工厂方法以创建一个Product对象。
4.ConcreteCreator 重定义工厂方法以返回一个ConcreteProduct实例。
代码如下:
package keifer.share.creationalPattern.factory.method; public class FactoryMethodPattern {//Test类 public static void main(String[] args) { IWorkFactory chineseWorkFactory = new ChineseWorkFactory(); chineseWorkFactory.getwork().work(); IWorkFactory americanWorkFactory = new AmericanWorkFactory(); americanWorkFactory.getwork().work(); } } interface IHuman {//所属角色:Product public void work(); } class AmericanPerson implements IHuman {//所属角色:ConcreteProduct public void work() { System.out.println("美国人在工作。"); } } class ChinesePerson implements IHuman {//所属角色:ConcreteProduct public void work() { System.out.println("中国人在工作。"); } } interface IWorkFactory {//工厂类接口。所属角色:Creator IHuman getwork(); } class ChineseWorkFactory implements IWorkFactory {//所属角色:ConcreteCreator @Override public IHuman getwork() { return new ChinesePerson(); } } class AmericanWorkFactory implements IWorkFactory {//所属角色:ConcreteCreator @Override public IHuman getwork() { return new AmericanPerson(); } } /** 运行结果: 中国人在工作。 美国人在工作。 */