工厂方法设计模式

前言:

工厂方法模式也属于类的创建模式,也被称为多态工厂模式,它与简单工厂模式的不同是,工厂定义为抽象的,工厂的每个子类负责创建具体的实体类。这样的好处是,增加新的实体,只需要增加相应的工厂就可以了,不需要修改原工厂代码。


怎么实现:

1、需要实体类:要被创建的类

2、被创建的类的共同父类:多态的体现,负责所有实例的公共接口,在工厂类中接受实体对象

3、抽象工厂类:所有工厂类的父类

4、工厂类:创建实体类,继承抽象工厂类,多态的体现


代码:

水果类父类:

package com.xhx.designpattern;

public interface Fruit {
    /**
     * 水果
     */
    void get();
}

苹果类:

package com.xhx.designpattern;

public class Apple implements Fruit{
    public void get(){
        System.out.println("我是苹果");
    }
}

香蕉类:

package com.xhx.designpattern;

public class Banana implements Fruit{
    public void get(){
        System.out.println("我是香蕉");
    }
}

工厂类父类:

package com.xhx.designpattern;

public interface FruitFactory {
    Fruit getFruit();
}

苹果工厂:

package com.xhx.designpattern;

public class AppleFactory implements FruitFactory {
    @Override
    public Fruit getFruit() {
        return new Apple();
    }
}

香蕉工厂:

package com.xhx.designpattern;

public class BananaFactory implements FruitFactory {
    @Override
    public Fruit getFruit() {
        return new Banana();
    }
}

启动测试类:

package com.xhx.designpattern;


public class App 
{
    /**
     * 简单工厂模式,增加新类一般都需要修改原来的工厂
     * 工厂方法模式把工厂定义为接口,增加新类同样增加具体工厂类
     * @param args
     */
    public static void main( String[] args )
    {
        //获得AppleFactory
        FruitFactory fruitFactory = new AppleFactory();
        Fruit apple = fruitFactory.getFruit();
        apple.get();

        //获得BananaFactory
        FruitFactory fruitFactory1 = new BananaFactory();
        Fruit banana = fruitFactory1.getFruit();
        banana.get();
    }
}


增加新类:

package com.xhx.designpattern;

public class Pear implements Fruit {
    @Override
    public void get() {
        System.out.println("我是梨子");
    }
}

增加新类工厂:

package com.xhx.designpattern;

public class PearFactory implements FruitFactory {
    @Override
    public Fruit getFruit() {
        return new Pear();
    }
}

猜你喜欢

转载自blog.csdn.net/u012326462/article/details/80565926