设计模式——工厂模式

来源:互联网 发布:淘宝win10激活码可信吗 编辑:程序博客网 时间:2024/06/07 13:47

设计模式——工厂模式

经过简单工厂的学习,发现在创建对象的时候,还是需要进行判断,这个判断少的时候还好,如果太多了,在使用的时候,这个简单工厂类就显得有些臃肿。所以还有一种模式,工厂模式。
package com.xueyoucto.xueyou;/** * Created by Administrator on 2016-07-05. */public class Person {    private Ax ax;    public Person(Ax ax) {        this.ax = ax;    }    public void kanshu(){        ax.kanshu();    }    public void kanchai(){        ax.kanchai();    }}

package com.xueyoucto.xueyou;/** * Created by Administrator on 2016-07-05. */public interface Ax {    public void kanshu();    public void kanchai();}

package com.xueyoucto.xueyou;/** * Created by Administrator on 2016-07-05. */public class WoodAx implements Ax {    @Override    public void kanshu() {        System.out.println("我是木斧子,我来砍树");    }    @Override    public void kanchai() {        System.out.println("我是木斧子,我来砍柴");    }}

package com.xueyoucto.xueyou;/** * Created by Administrator on 2016-07-05. */public class StealAx implements Ax {    @Override    public void kanshu() {        System.out.println("我是金斧子,我来砍树,我砍的好");    }    @Override    public void kanchai() {        System.out.println("我是金斧子,我来砍柴,我砍的快");    }}

package com.xueyoucto.xueyou;/** * Created by Administrator on 2016-07-05. */public abstract class AxFactory {   public abstract Ax createAx();}

package com.xueyoucto.xueyou;/** * Created by Administrator on 2016-07-05. */public class WoodAxFactory extends AxFactory{    @Override    public Ax createAx() {        return new WoodAx();    }}

package com.xueyoucto.xueyou;/** * Created by Administrator on 2016-07-05. */public class StealAxFactory extends AxFactory{    @Override    public Ax createAx() {        return new StealAx();    }}

package com.xueyoucto.xueyou;/** * Hello world! */public class App {    public static void main(String[] args) {        System.out.println("Hello World!");        int i = 3;        AxFactory af;        if (i == 1) {            af = new WoodAxFactory();        } else {            af = new StealAxFactory();        }        Person p = new Person(af.createAx());        p.kanchai();        p.kanshu();    }}

运行后的结果如下图:

我们看一下,这段代码:
        Person p = new Person(af.createAx());
直接能够从工厂产生斧子,不需要关注是什么斧子,只需要使用就可以了。如果需要特定的斧子,可以在上面进行判断,选择对应的工厂进行生产斧子。
0 0
原创粉丝点击