java设计模式之工厂方法模式(创建型模式)

package com.createtype.desginpatterns.facotry.factorymethod;
//抽象工厂类Creator
public abstract class AbstractFactoryCreator {  
    public final AbstractProduct newProduct() {  
        AbstractProduct product = createProduct();  
        check(product);  
        return product;  
    }  
      
    //手机检测  
    private AbstractProduct check(AbstractProduct product) {  
        //do something  
        return product;  
    }  
      
    //子类实现此方法,负责具体产品的创建  
    protected abstract AbstractProduct createProduct();   
}  

package com.createtype.desginpatterns.facotry.factorymethod;
///抽象产品类Product
public abstract class AbstractProduct {  
    //这里只定义一个简单方法  
    public abstract void use();  
}  

package com.createtype.desginpatterns.facotry.factorymethod;
//具体工厂类,负责生产Iphone,IphoneCreator
public class SpecificFactoryIphoneCreator extends AbstractFactoryCreator{  
  
    /** 
     *生成Iphone的工厂,负责产品的具体创建 
     */  
    @Override  
    protected AbstractProduct createProduct() {  
        return new SpecificIphoneProduct();  
    }  
}  

package com.createtype.desginpatterns.facotry.factorymethod;

//具体产品类IphoneProduc
public class SpecificIphoneProduct extends AbstractProduct {  
    @Override  
    public void use() {  
        System.out.println("Iphone生产出来啦,这是你的Iphone.");  
    }  
  
}  

package com.createtype.desginpatterns.facotry.factorymethod;

//测试类Client
//这样,我们就实现了一个简单的工厂方法。我们可以看到,在客户程序中,
//可以有效地避免了具体产品对象和应用程序之间的耦合。另外,当你要生产其它的产品时,
//比如android手机,
//只需用定义相应的android产品和生产android产品的工厂类,而两个抽象类不需要做任何修改。
//工程方法的优势:低耦合
//工厂方法:1.定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到了子类。
//2.对不同的产品,可以定义一个抽象的类,让不同的产品也继承这个抽象的产品。这就是工厂方法。
public class Test {
	public static void main(String[] args) {
		// 建一个Iphone工厂
		AbstractFactoryCreator creator = new SpecificFactoryIphoneCreator();
		// 产品由具体类生产
		AbstractProduct product = creator.newProduct();
		product.use();
	}

}

猜你喜欢

转载自lvwenwen.iteye.com/blog/1546071