设计模式之简单工厂模式/静态工厂模式

友情链接:

设计模式之工厂方法模式
设计模式之抽象工厂模式
设计模式之建造者模式

-------------------------------------------------------

不属于23种设计模式的——简单工厂模式

简单(静态)工厂模式:用一个专业类(工厂类)来负责一种产品的对象创建。

做法与好处:

1、把对象的创建和使用分开
2、将生产过程集中后,便于集中管理(增删改)
3、当实体类有变动时,使用者不需要再去修改代码

具体代码实现:

第一步:建包、建立静态工厂类

第二步:创建类型接口与实体类

/**
 * 水果接口
 */
public interface Fruit {
    int price();

    void draw();
}
import com.enjoy.entity.Fruit;

/**
 * 桔子
 */
public class Banana implements Fruit {
    private int price = 60;
    @Override
    public int price() {
        return price;
    }
    @Override
    public void draw() {
        System.out.print("仙人蕉");
    }
    public void setPrice(int price) {
        this.price = price;
    }
}
import com.enjoy.entity.Fruit;

/**
 * 桔子
 */
public class Orange implements Fruit {
    private String name = "";
    private int price = 70;
    public Orange(String name,int price){
        this.price = price;
        this.name = name;
    }
    @Override
    public int price() {
        return price;
    }

    @Override
    public void draw() {
        System.out.print("砂糖桔");
    }
    public void setPrice(int price) {
        this.price = price;
    }
}

第三步:创建静态工厂

import com.enjoy.entity.Fruit;
import com.enjoy.entity.fruit.Banana;
import com.enjoy.entity.fruit.Orange;

/**
 * 简单工厂模式 --- 静态工厂模式
 */
public class StaticFactory {
    public static final int TYPE_ORANGE = 1;//桔子
    public static final int TYPE_BANANA = 2;//香蕉
    /**
     * 单方法工厂
     */
    public static Fruit getFruit(int type) {
        if (TYPE_ORANGE == type) {
            return new Orange("Peter", 80);
        } else if (TYPE_BANANA == type) {
            return new Banana();
        }
        return null;
    }
    /**
     * 多方法工厂
     */
    public static Fruit getFruitOrange() {
        return new Orange("Peter", 80);
    }
    public static Fruit getFruitBanana() {
        return new Banana();
    }
}

第四步:创建静态工厂用户端

import com.enjoy.entity.Fruit;

/**
 * Peter吃苹果
 */
public class StaticFactoryClient {
    public static void main(String[] args) {
        peterdo();
        jamesdo();
    }
    // 送给Peter
    public static void peterdo() {
        // 我们无需提供具体的子类类名,只需要提供一个字符串即可得到相应的实例对象。
        Fruit fruit = StaticFactory.getFruit(StaticFactory.TYPE_BANANA);
        fruit.draw();
        System.out.println("-----------------");
    }
    // 送给james
    public static void jamesdo() {
        Fruit fruit = StaticFactory.getFruitBanana();
        fruit.draw();
        System.out.println("-----------------");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小 明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值