java设计模式之工厂模式

来源:互联网 发布:淘宝白菜价优惠券秒杀 编辑:程序博客网 时间:2024/06/14 22:33

工厂方法模式(虚拟构造)

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到子类。

·模式结构的描述:

//1.抽象产品(Product)

public abstract class PenCore{

   String color;

   public abstract voidwriteWord(String s);

}

//2.具体产品(ConcerteProduct)

public class RedPenCore extends PenCore{

    RedPenCore(){

      color="红色";

    }

    public void writeWord(Strings){

       System.out.println("写出"+color+"的字:"+s);

    }

}

//3.具体产品(ConcerteProduct)

public class BluePenCore extends PenCore{

    BluePenCore(){

      color="蓝色";

    }

    public void writeWord(Strings){

       System.out.println("写出"+color+"的字:"+s);

    }

}

//4.具体产品(ConcerteProduct)

public class BlackPenCore extends PenCore{

    BlackPenCore(){

      color="黑色";

    }

    public void writeWord(Strings){

       System.out.println("写出"+color+"的字:"+s);

    }

}

//5.构造者(Creator)

public abstract class BallPen{

    BallPen(){

       System.out.println("生产了一只装有"+getPenCore().color+"笔芯的圆珠笔");

    }

    public abstract PenCoregetPenCore(); //工厂方法

}

//6.具体构造者(ConcreteCreator)

public class RedBallPen extends BallPen{

    public PenCore getPenCore(){

       return new RedPenCore();

    }

}

//7.具体构造者(ConcreteCreator)

public class BlueBallPen extends BallPen{

    public PenCore getPenCore(){

       return new BluePenCore();

    }

}

//8.具体构造者(ConcreteCreator)

public class BlackBallPen extends BallPen{

    public PenCore getPenCore(){

       return new BlackPenCore();

    }

}

//9.模式的使用

public class Application{

    public static voidmain(String args[]){

       PenCore penCore;

       BallPen ballPen=newBlueBallPen();

       penCore=ballPen.getPenCore();

       penCore.writeWord("你好,很高兴认识你");

       ballPen=new RedBallPen();

       penCore=ballPen.getPenCore();

       penCore.writeWord("How areyou");

       ballPen=new BlackBallPen();

       penCore=ballPen.getPenCore();

       penCore.writeWord("nice to meetyou");

    }

}

模式的优点

       ·可以让用户的代码和某个特定类的子类代码解耦。

       ·用户不必知道它所使用的对象是怎样被创建的,只需知道该对象又那些方法即可。

使用的情景

       ·用户需要一个类的子类的实例,但不希望与该子类形成耦合。

       ·用户需要一个类的子类的实例,但不知道该类有哪些子类可用。

具体的实例

       ·Java集合框架

       ·药品生产等。

源码下载:

http://download.csdn.net/download/gb_young/5355413

原创粉丝点击