设计模式(二):静态工厂模式与工厂方法模式(创建型模式)

1.静态工厂模式(简单工厂模式)

1.1工厂类StaticFactory.java


/**
 * @ClassName:StaticFactory
 * @PackageName:com.figo.designpatterns.factory
 * @Description:类描述
 * @Date:2023/5/15 20:51
 * @Author:figo
 */
public class StaticFactory {
    public static final int TYPE_APPLE=1;
    public static final int TYPE_BANANA=2;
    public static final int TYPE_ORANGE=3;

    /**
     * 根据类型创建产品
     * @param type
     * @return
     */
    public static Fruit getFruint(int type)
    {
        switch (type)
        {
            case TYPE_APPLE:
                return new Apple();

            case TYPE_BANANA:
                return new Banana();
            case TYPE_ORANGE:
                return new Orange();
            default:
                break;
        }
        return null;
    }
}

1.2 产品接口

package com.figo.designpatterns.model;

/**
 * @ClassName:Fruit
 * @PackageName:com.figo.designpatterns.model
 * @Description:类描述
 * @Date:2023/5/15 20:42
 * @Author:figo
 */
public interface Fruit {
    String name = null;
    String colour = null;

    /**
     *
     */
    void cleanAndEat();
}

1.3 产品模型类 Apple,Banana,Orange

package com.figo.designpatterns.model;

/**
 * @ClassName:Apple
 * @PackageName:com.figo.designpatterns.model
 * @Description:类描述
 * @Date:2023/5/15 20:42
 * @Author:figo
 */
public class Apple implements Fruit{
    @Override
    public void cleanAndEat() {
        System.out.println("clean and eat apple!");
    }
}


package com.figo.designpatterns.model;

/**
 * @ClassName:Banana
 * @PackageName:com.figo.designpatterns.model
 * @Description:类描述
 * @Date:2023/5/15 20:45
 * @Author:figo
 */
public class Banana implements Fruit{
    @Override
    public void cleanAndEat() {
        System.out.println("clean and eat Banana!");

    }
}


package com.figo.designpatterns.model;

/**
 * @ClassName:Orange
 * @PackageName:com.figo.designpatterns.model
 * @Description:类描述
 * @Date:2023/5/15 20:46
 * @Author:figo
 */
public class Orange implements Fruit{
    @Override
    public void cleanAndEat() {
        System.out.println("clean and eat Orange!");

    }
}

1.4 静态工厂测试类

package com.figo.designpatterns;

import com.figo.designpatterns.factory.AppleFactory;
import com.figo.designpatterns.factory.StaticFactory;
import com.figo.designpatterns.model.Apple;
import com.figo.designpatterns.model.Fruit;

/**
 * @ClassName:DesignPatternTest
 * @PackageName:com.figo.designpatterns
 * @Description:类描述
 * @Date:2023/5/15 20:40
 * @Author:figo
 */
public class DesignPatternTest {
    public static void main(String[] args) {
        /*
        1.静态方法模式,该模式不够灵活,每次新增新的产品,需要修改StaticFactory工厂类
        违背开闭原则的,对扩展开放,对修改关闭
         */
        Fruit fruit1= StaticFactory.getFruint(StaticFactory.TYPE_APPLE);
        fruit1.cleanAndEat();

    }
}

2.工厂方法模式

2.1 工厂方法接口

package com.figo.designpatterns.factory;

import com.figo.designpatterns.model.Fruit;

/**
 * @ClassName:FruitFactory 工厂方法接口
 * @PackageName:com.figo.designpatterns.factory
 * @Description:类描述
 * @Date:2023/5/15 21:13
 * @Author:figo
 */
public interface FruitFactory {
    public Fruit getFruit();
}

2.2 各个产品具体的工厂

package com.figo.designpatterns.factory;

import com.figo.designpatterns.model.Apple;
import com.figo.designpatterns.model.Fruit;

/**
 * @ClassName:AppleFactory 工厂方法模式,创建苹果
 * @PackageName:com.figo.designpatterns.factory
 * @Description:类描述
 * @Date:2023/5/15 21:14
 * @Author:figo
 */
public class AppleFactory implements FruitFactory{
    @Override
    public Fruit getFruit() {
        return new Apple();
    }
}


package com.figo.designpatterns.factory;

import com.figo.designpatterns.model.Banana;
import com.figo.designpatterns.model.Fruit;

/**
 * @ClassName:BananaFactory 工厂方法模式,创建香蕉
 * @PackageName:com.figo.designpatterns.factory
 * @Description:类描述
 * @Date:2023/5/15 21:15
 * @Author:figo
 */
public class BananaFactory implements FruitFactory{
    @Override
    public Fruit getFruit() {
        return new Banana();
    }
}




package com.figo.designpatterns.factory;

import com.figo.designpatterns.model.Fruit;
import com.figo.designpatterns.model.Orange;

/**
 * @ClassName:OrangeFactory 工厂方法模式,创建桔子
 * @PackageName:com.figo.designpatterns.factory
 * @Description:类描述
 * @Date:2023/5/15 21:15
 * @Author:figo
 */
public class OrangeFactory implements FruitFactory{
    @Override
    public Fruit getFruit() {
        return new Orange();
    }
}

2.3 工厂方法模式测试

package com.figo.designpatterns;

import com.figo.designpatterns.factory.AppleFactory;
import com.figo.designpatterns.factory.StaticFactory;
import com.figo.designpatterns.model.Apple;
import com.figo.designpatterns.model.Fruit;

/**
 * @ClassName:DesignPatternTest
 * @PackageName:com.figo.designpatterns
 * @Description:类描述
 * @Date:2023/5/15 20:40
 * @Author:figo
 */
public class DesignPatternTest {
    public static void main(String[] args) {

        /**
         * 2.工厂方法模式,符合开闭原则,对扩展开放,对修改关闭
         * 每次需要新增一个产品,新增一个工厂即可
         */
        Fruit fruit2= new AppleFactory().getFruit();
        fruit2.cleanAndEat();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值