问题:用户希望自己用圆珠笔能使用不同颜色的笔芯
解析:问题比较简单,我们直接进入正题,工厂模式的机构与本问题的对照:1、抽象产品,在本问题中,把笔芯抽象出来;2、具体产品,继承抽象笔芯类,可以有不同颜色的笔芯类;3、构造着,扶着实例化产品的抽象类;4、具体构造者,具体实例化各种抽象产品,本问题中是实例化各种颜色的笔芯。具体代码如下:
package face; //工厂模式
abstract class PenCore{ //笔芯(抽象产品)
String color;
public abstract void writeWord(String s);
}
class RedPenCore extends PenCore{ //红色笔芯(具体产品)
RedPenCore (){
super.color = "红色";
}
@Override
public void writeWord(String s) {
System.out.println("写出"+color+"的字:"+s);
}
}
class BluePenCore extends PenCore{ //蓝色笔芯(具体产品)
BluePenCore (){
super.color = "蓝色";
}
@Override
public void writeWord(String s) {
System.out.println("写出"+color+"的字:"+s);
}
}
class BlackPenCore extends PenCore{ //黑色笔芯(具体产品)
BlackPenCore (){
super.color = "黑色";
}
@Override
public void writeWord(String s) {
System.out.println("写出"+color+"的字:"+s);
}
}
abstract class PenCoreCreator{ //抽象的笔芯构造者构造者
public abstract PenCore getPenCore();
}
class RedCoreCreator extends PenCoreCreator{ //红色笔芯构造者(具体构造者)
@Override
public PenCore getPenCore() {
return new RedPenCore();
}
}
class BlueCoreCreator extends PenCoreCreator{ //蓝色笔芯构造者(具体构造者)
@Override
public PenCore getPenCore() {
return new BluePenCore();
}
}
class BlackCoreCreator extends PenCoreCreator{ //黑色笔芯构造者(具体构造者)
@Override
public PenCore getPenCore() {
return new BlackPenCore();
}
}
class BallPen{ //圆珠笔
PenCore core;
public void usePenCore(PenCore core){
this.core =core;
}
public void write(String s){
core.writeWord(s);
}
}
public class Demo09 {
public static void main(String[] args) {
PenCore penCore; //笔芯
PenCoreCreator creator; //笔芯构造者
BallPen ballPen =new BallPen(); //圆珠笔实例化
creator = new RedCoreCreator(); //实例化一个红色笔芯构造者
penCore = creator .getPenCore(); //返回一个红色笔芯
ballPen.usePenCore(penCore); //圆珠笔用这支红色笔芯
ballPen.write("我的大刀早已饥渴难耐了"); //圆珠笔写出“我的大刀早已饥渴难耐了”
creator =new BlueCoreCreator();
penCore = creator.getPenCore();
ballPen.usePenCore(penCore);
ballPen.write("见到你很高兴");
}
}