點擊(此處)摺疊或打開
-
package factoryMethod;
-
-
abstract public class Laptop {
-
-
private String mark;
-
-
public Laptop(String str){
-
-
this.mark = str;
-
-
}
-
-
abstract public String getId();
-
-
public void echoMark(){
-
-
System.out.println("this
is a "+mark+"
Laptop");
-
-
}
-
- }
有了產品接口,我們就可以去定義那個核心工廠接口
點擊(此處)摺疊或打開
-
package factoryMethod;
-
-
public interface LaptopFactory {
-
-
public Laptop produce();
-
-
public void service();
-
- }
點擊(此處)摺疊或打開
-
package factoryMethod;
-
-
public class AcerLaptop extends Laptop {
-
-
-
private static final String mark = "Acer";
-
protected static int initId;
-
-
public AcerLaptop() {
-
super(AcerLaptop.mark);
-
AcerLaptop.initId = 10001;
-
}
-
-
public String getId() {
-
-
return "Acer--"+(AcerLaptop.initId++);
-
-
}
-
- }
點擊(此處)摺疊或打開
-
package factoryMethod;
-
-
public class LenovoLaptop extends Laptop {
-
-
private static final String mark = "Lenovo";
-
protected static int initId;
-
-
public LenovoLaptop() {
-
-
super(LenovoLaptop.mark);
-
LenovoLaptop.initId = 20001;
-
}
-
-
public String getId() {
-
-
return "Lenovo--"+(LenovoLaptop.initId++);
-
-
}
-
- }
其實Laptop定義的抽象方法沒什麼具體意義,該例子只爲描述工廠方法模式。
點擊(此處)摺疊或打開
-
package factoryMethod;
-
-
public class AcerFactory implements LaptopFactory {
-
-
@Override
-
public Laptop produce() {
-
-
return new AcerLaptop();//生產Acer的本本
-
-
}
-
-
@Override
-
public void service() {
-
-
System.out.println("welcom
to Acer hotline ");
-
-
}
-
- }
點擊(此處)摺疊或打開
-
public class LenovoFactory implements LaptopFactory{
-
-
public Laptop produce(){
-
-
return new LenovoLaptop();//生產lenovo的本本
-
-
}
-
-
public void service(){
-
-
System.out.println("welcom
to Lenovo hotline ");
-
-
}
-
- }
點擊(此處)摺疊或打開
-
package factoryMethod;
-
-
public class Client {
-
-
public static void main(String[] args) {
-
-
LenovoFactory lf = new LenovoFactory();
-
AcerFactory af= new AcerFactory();
-
Laptop lt1 = lf.produce();
-
Laptop lt2 = lf.produce();
-
Laptop lt3 = af.produce();
-
Laptop lt4 = af.produce();
-
-
-
lf.service();
-
System.out.println(lt1.getId());
-
System.out.println(lt2.getId());
-
System.out.println("--------------");
-
af.service();
-
System.out.println(lt3.getId());
-
System.out.println(lt4.getId());
-
-
}
- }
打印結果如下
點擊(此處)摺疊或打開
-
welcom to Lenovo hotline
-
Lenovo--20001
-
Lenovo--20002
-
--------------
-
welcom to Acer hotline
-
Acer--10001
- Acer--10002
過了一段時間,該OEM決定除了做本本,也做手機。而且OEM核心工廠決定改變下現有策略,每個子工廠做同一品牌的兩個產品,例如,子工廠A做Acer的手機和本本。