java设计模式之工厂方法模式(创建型模式)
?
package com.createtype.desginpatterns.facotry.factorymethod;//抽象工厂类Creatorpublic 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;///抽象产品类Productpublic abstract class AbstractProduct { //这里只定义一个简单方法 public abstract void use(); } package com.createtype.desginpatterns.facotry.factorymethod;//具体工厂类,负责生产Iphone,IphoneCreatorpublic class SpecificFactoryIphoneCreator extends AbstractFactoryCreator{ /** *生成Iphone的工厂,负责产品的具体创建 */ @Override protected AbstractProduct createProduct() { return new SpecificIphoneProduct(); } } package com.createtype.desginpatterns.facotry.factorymethod;//具体产品类IphoneProducpublic 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();}}