java设计模式——工厂模式一

java工厂方法模式

工厂方法模式所包含的成员:
(1)抽象产品(product):抽象类或者接口,用于定义具体产品必须实现的方法
(2)具体产品(concreteproduct):如果product是一个抽象类,那么具体产品是product的子类;如果product是一个接口,那么具体产品是实现该接口的类。
注:一般情况下,一个抽象产品是一个抽象类,而具体产品是派生出的众多继承该抽象产品类的不同子类
(3)构造者(creator):一个接口或抽象类。构造者负责定义一个被称为工厂方法的抽象方法(该方法返回抽象产品的一个对象引用——这一点也体现了构造者和抽象产品之间的关系:构造者依赖于抽象产品)
(4)具体构造者(concretecreator):如果构造者是抽象类,具体构造者类就是构造者类的众多不同的子类;如果构造者是接口,具体构造者就是众多实现该接口的不同子类。具体构造者重写工厂方法,使该方法返回具体产品的实例。
工厂方法模式的示例代码:

public abstract class pencore {         //抽象产品类,给出要实现的方法
    String color;
    public abstract void writeword(String color);
}

public class redpencore extends pencore{        //具体产品类,重写抽象产品类中的方法,实现子类具体的功能以满足客户的不同需求
    redpencore()
    {
        color="红色";
    }
    public void writeword(String neirong) {
        System.out.println("写出"+color+"的字:"+neirong);
    } 
}

public class blackpencore extends pencore{
    public blackpencore()
    {
        color="黑色";
    }
    public void writeword(String neirong)
    {
        System.out.println("写出"+color+"的字:"+neirong);
    }
}

public abstract class pencorecreator {      //构造者类
    public abstract pencore getpencore();       //抽象方法,返回抽象产品的对象引用(可见具体产品与具体创造者类是一一对应的)
                                                 //一个具体创造者对应能生产一种具体产品(如红笔芯制造者redcorecreator能对应生产(返回对象引用)具体红笔芯产品redpencore)
}

public class redcorecreator extends pencorecreator{     //具体构造者类
    public pencore getpencore()
    {
        return new redpencore();            // 一个具体创造者对应能生产一种具体产品(如红笔芯制造者redcorecreator能对应生产(返回对象引用)具体红笔芯产品redpencore)
    }
}

public class blackcorecreator extends pencorecreator{
    public pencore getpencore()             //函数头的返回值类型为抽象产品类的对象(pencore),但是实际返回的确是具体产品blackpencore
                                                //因为可以将基类对象赋值给子类对象
    {
        return new blackpencore();              //返回具体产品类的对象引用
    }
}

public class ballpen {          //圆珠笔类
    pencore core;
    public void userpencore(pencore core)       //通过该方法选择使用哪一个产品(参数列表中传递进来一个抽象产品的对象引用)
    {
        this.core=core;
    }
    public void write(String s)                //通过该方法调用具体产品的writeword方法
    {
        core.writeword(s);
    }
}

public class test {
    public static void main(String[] args) {
        pencore core;
        pencorecreator creator;
        ballpen b1=new ballpen();
        creator=new redcorecreator();
        core=creator.getpencore();
        b1.userpencore(core);
        b1.write("我开发了红笔");
        creator=new blackcorecreator();
        core=creator.getpencore();
        b1.userpencore(core);
        b1.write("我开发了黑笔");
    }  
}

关于工厂方法模式个人总结:
(1)一般情况下工厂方法模式中具体构造者与具体产品一一对应,一个具体构造者生产一个具体产品。
(2)工厂方法模式非常类似于现实生活中的生产模式:最上级下达一个开始生产的命令,下级就开始按照自己的生产方法和目标生产不同的产品,供不同的用户使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值