posts - 51, comments - 17, trackbacks - 0, articles - 9
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          java模式之工廠模式

          Posted on 2007-03-29 13:18 chenweicai 閱讀(287) 評論(0)  編輯  收藏

          簡單工廠模式(缺點:每增加一個具體產品時 ,就要修改工廠方法,工廠方法負責了所有具體產品的創建)

          舉個例子:
          ------------------
          public interface Fruit {

          ?void grow();
          ?
          ?void harvest();
          ?
          ?void plant();
          }
          -------------------
          public class Apple implements Fruit {

          ?private int treeAge;
          ?
          ?public void grow() {
          ??// TODO Auto-generated method stub
          ??System.out.println("Apple is growing...");
          ??
          ?}

          ?public void harvest() {
          ??// TODO Auto-generated method stub
          ??System.out.println("Apple has been harvested.");
          ?}

          ?public void plant() {
          ??// TODO Auto-generated method stub
          ??System.out.println("Apple has been planted.");
          ??
          ?}

          ?public int getTreeAge() {
          ??return treeAge;
          ?}

          ?public void setTreeAge(int treeAge) {
          ??this.treeAge = treeAge;
          ?}
          ?
          }
          -------------------
          public class Grape implements Fruit {

          ?private boolean seedless;
          ?
          ?
          ?
          ?public boolean isSeedless() {
          ??return seedless;
          ?}

          ?public void setSeedless(boolean seedless) {
          ??this.seedless = seedless;
          ?}

          ?public void grow() {
          ??// TODO Auto-generated method stub
          ??System.out.println("Grape is growing...");
          ?}

          ?public void harvest() {
          ??// TODO Auto-generated method stub
          ??System.out.println("Grape has been harvested.");
          ?}

          ?public void plant() {
          ??// TODO Auto-generated method stub
          ??System.out.println("Grape has been planted.");
          ??
          ?}

          ?
          }


          ---------------------------
          public class Strawberry implements Fruit {

          ?public void grow() {
          ??// TODO Auto-generated method stub
          ??System.out.println("Strawberry is growing...");
          ?}

          ?public void harvest() {
          ??// TODO Auto-generated method stub
          ??System.out.println("Strawberry has been harvested.");
          ?}

          ?public void plant() {
          ??// TODO Auto-generated method stub
          ??System.out.println("Strawberry has been planted.");
          ?}
          }

          -------------------------
          public class FruitGardener {

          ?//靜態工廠方法
          ?public static Fruit factory(String which) throws BadFruitException{
          ??if(which.equalsIgnoreCase("apple")){
          ???return new Apple();
          ??}
          ??else if(which.equalsIgnoreCase("strawberry")){
          ???return new Strawberry();
          ??}
          ??else if(which.equalsIgnoreCase("grape")){
          ???return new Grape();
          ??}
          ??else{
          ???throw new BadFruitException("Bad fruit request");
          ??}
          ?}
          }

          ---------------------------
          public class BadFruitException extends Exception {

          ?public BadFruitException(String msg){
          ??super(msg);
          ?}
          }


          --------------------------
          public class Client {

          ?public static void main(String[] args){
          ??
          ??try{
          ???Fruit apple = (Fruit)FruitGardener.factory("Apple");
          ???System.out.println("apple is class: " + apple.getClass().getName());
          ???apple.plant();
          ???apple.grow();
          ???apple.harvest();
          ???System.out.println();
          ???
          ???Fruit grape = (Fruit)FruitGardener.factory("grape");
          ???System.out.println("grape is class: " + grape.getClass().getName());
          ???grape.plant();
          ???grape.grow();
          ???grape.harvest();
          ???System.out.println();
          ???
          ???Fruit strawberry = (Fruit)FruitGardener.factory("strawberry");
          ???System.out.println("strawberry is class: " + strawberry.getClass().getName());
          ???strawberry.plant();
          ???strawberry.grow();
          ???strawberry.harvest();
          ???
          ??}catch(BadFruitException e){
          ???e.printStackTrace();
          ??}
          ?}
          }


          2 工廠方法模式:解決了簡單工廠模式的缺點, 將每一個具體產品的創建工作交給對應的具體工廠角色去解決

          舉個例子:
          ---------------------
          public interface FruitGardener {

          ?public Fruit factory();
          }


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

          public class AppleGardener implements FruitGardener{

          ?public Fruit factory() {
          ??return new Apple();
          ?}
          }

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

          public class GrapeGardener implements FruitGardener{

          ?public Fruit factory() {
          ??return new Grape();
          ?}
          }


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

          public class StrawGardener implements FruitGardener{

          ?public Fruit factory() {
          ??return new Strawberry();
          ?}
          }

          -----------------
          public class Client {

          ?private static FruitGardener applegardener, grapegardener, strawgardener;
          ?private static Fruit apple, grape, strawberry;
          ?
          ?public static void main(String[] args){
          ??applegardener = new AppleGardener();
          ??apple = applegardener.factory();
          ??System.out.println("apple is class: " + apple.getClass().getName());
          ??apple.plant();
          ??apple.grow();
          ??apple.harvest();
          ??System.out.println();
          ??
          ??grapegardener = new GrapeGardener();
          ??grape = grapegardener.factory();
          ??System.out.println("grape is class: " + grape.getClass().getName());
          ??grape.plant();
          ??grape.grow();
          ??grape.harvest();
          ??System.out.println();

          ??strawgardener = new StrawGardener();
          ??strawberry = strawgardener.factory();
          ??System.out.println("strawberry is class: " + strawberry.getClass().getName());
          ??strawberry.plant();
          ??strawberry.grow();
          ??strawberry.harvest();
          ?}
          }


          3 抽象工廠模式:解決多產品簇問題

          舉個例子:

          -------------------
          public interface Fruit {

          //?public String getName();
          }

          public class NorthernFruit implements Fruit{

          ?private String name;

          ?public String getName() {
          ??return name;
          ?}

          ?public void setName(String name) {
          ??this.name = name;
          ?}

          ?public NorthernFruit(String name) {
          ??super();
          ??// TODO Auto-generated constructor stub
          ??this.name = name;
          ?}
          ?
          ?
          }



          public class TropicalFruit implements Fruit{

          ?private String name;

          ?public String getName() {
          ??return name;
          ?}

          ?public void setName(String name) {
          ??this.name = name;
          ?}

          ?public TropicalFruit(String name) {
          ??super();
          ??// TODO Auto-generated constructor stub
          ??this.name = name;
          ?}
          ?
          ?
          }



          public interface Veggie {

          }


          public class TropicalVeggie implements Veggie{
          ?
          ?private String name;

          ?public String getName() {
          ??return name;
          ?}

          ?public void setName(String name) {
          ??this.name = name;
          ?}

          ?public TropicalVeggie(String name) {
          ??super();
          ??// TODO Auto-generated constructor stub
          ??this.name = name;
          ?}
          ?
          ?

          }


          public class NorthernVeggie implements Veggie{

          ?private String name;

          ?public String getName() {
          ??return name;
          ?}

          ?public void setName(String name) {
          ??this.name = name;
          ?}

          ?public NorthernVeggie(String name) {
          ??super();
          ??// TODO Auto-generated constructor stub
          ??this.name = name;
          ?}
          ?
          ?
          }

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

          public interface Gardener {

          ?public Fruit createFruit(String name);
          ?
          ?public Veggie createVeggie(String name);
          }

          public class NorthernGardener implements Gardener {

          ?public Fruit createFruit(String name) {
          ??return new NorthernFruit(name);
          ?}

          ?public Veggie createVeggie(String name) {
          ??return new NorthernVeggie(name);
          ?}

          ?
          }



          public class TropicalGardener implements Gardener {

          ?public Fruit createFruit(String name) {
          ??return new TropicalFruit(name);
          ?}

          ?public Veggie createVeggie(String name) {
          ??return new TropicalVeggie(name);
          ?}

          ?
          }


          public class Client {

          ?private static Gardener tropicalgardener ,northerngardener;
          ?private static Fruit northernfruit, tropicalfruit;
          ?private static Veggie northernveggie, tropicalveggie;
          ?
          ?public static void main(String[] args){
          ??tropicalgardener = new TropicalGardener();
          ??tropicalfruit = tropicalgardener.createFruit("tropicalfruit");
          ??//System.out.println(tropicalfruit.getName());
          ??tropicalveggie = tropicalgardener.createVeggie("tropicalveggie");
          ??
          ??northerngardener = new NorthernGardener();
          ??northernfruit = northerngardener.createFruit("northernfruit");
          ??northernveggie = northerngardener.createVeggie("northernveggie");
          ?}
          ?
          }


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 旬邑县| 乐昌市| 湖北省| 思茅市| 宜丰县| 吴堡县| 定州市| 太湖县| 津市市| 盐边县| 苗栗市| 天气| 宾阳县| 烟台市| 达拉特旗| 阜平县| 郧西县| 泸西县| 伊春市| 镇巴县| 宁波市| 桓仁| 泰安市| 香格里拉县| 清流县| 平利县| 玉门市| 靖州| 吕梁市| 乐亭县| 南汇区| 威海市| 邹城市| 新安县| 西峡县| 石狮市| 友谊县| 南皮县| 黔南| 会同县| 杨浦区|