java设计方式之工厂方法模式(创建型模式)
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(); } }