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

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

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

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

做法与好处:

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

具体代码实现:

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

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

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

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

/**
* 水果接口
*/
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("-----------------");
}
}