简单工厂
意图:(这是工厂方法的,没有给出工厂方法的实现)
1.定义一个用于创建对象的接口,让子类来决定实例化哪一个类。
2.工厂方法使一个类的实例化延迟到其子类。
这里我将建立pizza 做出示范。
pizza类://表示pizza 的一些特性。
public class pizza
{
String name;
void getName(){System.out.println(name);}
}
spf 类:
//simplePizzaFactory的缩写,一个专门用来决定实例化那个对象的类。
//当然这里也可以把决定方法写在pizzaStore 这个类里,具体见如下的新pizzaStore;
public class spf
{
pizza createPizza(String name)
{
pizza pi=null;
if(name.equals("liu"))pi=new liu();
else if(name.equals("ju")) pi=new ju();
return pi;
}
}
pizza pi=null;
}
参与者:
- 工厂角色(Creator)
是简单工厂模式的核心,它负责实现创建所有具体产品类的实例。工厂类可以被外界直接调用,创建所需的产品对象。 - 抽象产品角色(Product)
是所有具体产品角色的父类,它负责描述所有实例所共有的公共接口。 - 具体产品角色(Concrete Product)
继承自抽象产品角色,一般为多个,是简单工厂模式的创建目标。工厂类返回的都是该角色的某一具体产品。
UML图:
参考代码:
运动员.java
public interface 运动员 {
public void 跑();
public void 跳();
}
足球运动员.java
public class 足球运动员 implements 运动员 {
public void 跑(){
//跑啊跑
}
public void 跳(){
//跳啊跳
}
}
篮球运动员.java
public class 篮球运动员 implements 运动员 {
public void 跑(){
//do nothing
}
public void 跳(){
//do nothing
}
}
体育协会.java
public class 体育协会 {
public static 运动员 注册足球运动员(){
return new 足球运动员();
}
public static 运动员 注册篮球运动员(){
return new 篮球运动员();
}
}
俱乐部.java
public class 俱乐部 {
private 运动员 守门员;
private 运动员 后卫;
private 运动员 前锋;
public void test() {
this.前锋 = 体育协会.注册足球运动员();
this.后卫 = 体育协会.注册足球运动员();
this.守门员 = 体育协会.注册足球运动员();
守门员.跑();
后卫.跳();
}
}