国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

抽象工廠類

2019-11-18 15:05:02
字體:
供稿:網(wǎng)友

  //package com.cc;
import java.util.*;
import java.lang.Class;

interface book{
void sayBookName();
void sayBookPRice();
}

class ChineseBook implements book //中文書
{
private String name;
private int price;
public ChineseBook(){
//this.ChineseBook("chinese",10);
name = "ChineseBook";
price = 10;
}

public ChineseBook(String name,int price){
this.name = name;
this.price = price;
}

public void sayBookName(){
System.out.println("i am a chinese book "+name);
}

public void sayBookPrice(){
System.out.println("my price is "+price);
}
//繼續(xù)書店工廠
//
private static class Factory extends BookFactory //內(nèi)部類的使用
{
protected book create(){
return new ChineseBook();
}
}
static { //生成1個實例后,就要把這個實例加到工廠中
System.out.println("loading ChineseBook.class");
BookFactory.addFactory("ChineseBook",new Factory()); //為什么要把工廠
//放到list中呢?便于加載一次以后可直接調(diào)用
}
}

class EnglishBook implements book //英文書
{
private String name;
private int price;
public EnglishBook(){
//this.EnglishBook("english",10);
name = "EnglisthBook";
price = 10;
}

public EnglishBook(String name,int price){
this.name = name;
this.price = price;
}

public void sayBookName(){
System.out.println("i am a english book "+name);
}

public void sayBookPrice(){
System.out.println("my price is "+price);
}

//繼續(xù)書店工廠
//
private static class Factory extends BookFactory
{
protected book create(){
return new EnglishBook();
}
}
static { //生成1個實例后,就要把這個實例加到工廠中
System.out.println("loading EnglishBook.class");
BookFactory.addFactory("EnglishBook",new Factory()); //為什么要把工廠
//放到list中呢?便于加載一次以后可直接調(diào)用
}
}

abstract class BookFactory
{
protected abstract book create(); //這個方法要在具體類中實現(xiàn)
private static Map factories = new HashMap(); //工廠map
public static void addFactory(String id,BookFactory f)
{
//加入工廠,將書和創(chuàng)建書的工廠加入到map中,為什么要加入創(chuàng)建書的工廠呢?
//因為創(chuàng)建書的工廠有個create()方法,他要具體返回一個實例
System.out.println(factories.put(id,f));
}
public static final book createBook(String id){//創(chuàng)建書實例,書的名稱作為參數(shù),傳出的是被創(chuàng)建好的Book的實例
if (!factories.containsKey(id))//當(dāng)工廠中不包含這個類時要裝載
{
try{
// Load dynamically 動態(tài)裝載
Class.forName(id); //怎么加載的?只要直接執(zhí)行
//這個類,類就會調(diào)用static里的語句
}catch(ClassNotFoundException e){
throw new RuntimeException("error"+id);
}
// See if it was put in 看看它是否被裝載
if(!factories.containsKey(id))throw new RuntimeException("Bad shape creation: " + id);
}
return ((BookFactory)factories.get(id)).create();
}
}

public class BookFactory2
{
String bookList[] = {"EnglishBook", "ChineseBook","EnglishBook","ChineseBook","ChineseBook","EnglishBook"};
List books = new ArrayList();

public void test(){
for (int i=0;i<bookList.length;i++)
{
books.add(BookFactory.createBook(bookList));
System.out.println("already create");
}
Iterator it = books.iterator();
while(it.hasNext()){
book s = (book)it.next();
s.sayBookName();
}
}
public static void main(String args[]) {
new BookFactory2().test();
}
}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 小金县| 雅安市| 专栏| 澜沧| 西和县| 双流县| 名山县| 凌海市| 祁连县| 尼木县| 石柱| 古田县| 阿坝| 绵阳市| 辉县市| 郎溪县| 蚌埠市| 牙克石市| 焉耆| 灯塔市| 谢通门县| 肥西县| 鄂托克旗| 宜兰县| 鞍山市| 雷州市| 南涧| 本溪市| 梨树县| 隆回县| 改则县| 宾川县| 雷波县| 凤冈县| 乳山市| 贺兰县| 腾冲县| 都兰县| 都兰县| 中宁县| 贞丰县|