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

友情链接:

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

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

不属于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("-----------------");
    }
}
发布了48 篇原创文章 · 获赞 165 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/FMC_WBL/article/details/103104477