用实例讲解工厂方法模式
程序员文章站
2024-01-05 12:27:16
...
原有需求
public class FactoryMethodTest {
public static void main(String[] args) {
new Application().getProduct().method1();
/**
* ProductA.method1 executed..
*/
}
}
class ProductA{
public void method1(){
System.out.println("ProductA.method1 executed..");
}
}
class Application{
private ProductA createProduct(){
return new ProductA();
}
ProductA getProduct(){
ProductA product = createProduct();
// ..
return product;
}
}
使用简单工厂
public class FactoryMethodTest {
public static void main(String[] args) {
new Application().getProduct("1").method1();
/**
* ProductA.method1 executed..
*/
}
}
interface Product{
void method1();
}
class ProductFactory{
static Product getProduct(String type){
if("1".equals(type)){
return new ProductA();
} else {
return new ProductB();
}
}
}
class ProductA implements Product{
@Override
public void method1(){
System.out.println("ProductA.method1 executed..");
}
}
class ProductB implements Product{
@Override
public void method1(){
System.out.println("ProductB.method1 executed..");
}
}
class Application{
Product createProduct(String type){
return ProductFactory.getProduct(type);
}
Product getProduct(String type){
Product product = createProduct(type);
// 一系列操作共同的预处理操作。。。
return product;
}
}
工厂方法模式
// 工厂方法模式
public class FactoryMethodTest {
public static void main(String[] args) {
Application applicationA = new ApplicationA();
applicationA.getProduct().method1();
/**
* ProductA.method1 executed..
*/
}
}
interface Product{
void method1();
}
class ProductA implements Product{
@Override
public void method1(){
System.out.println("ProductA.method1 executed..");
}
}
class ProductB implements Product{
@Override
public void method1(){
System.out.println("ProductB.method1 executed..");
}
}
abstract class Application{
abstract Product createProduct();
public Product getProduct(){
// 一系列操作共同的预处理操作。。。
return createProduct();
}
}
class ApplicationA extends Application{
@Override
Product createProduct() {
// ...
return new ProductA();
}
}
class ApplicationB extends Application{
@Override
Product createProduct() {
// ...
return new ProductB();
}
}