创建型模式包括以下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();
}
}
/**
运行结果:
中国人在工作。
美国人在工作。
*/