抽象工厂

  抽象工厂,是生成一组相互关联的产品
  比较于工厂方法,工厂方法是多个产品单个层次的产品,比如生产单独的墨水或者笔,这时候就很适合工厂方法,它没有维护组件之间的关系
  假如,要生产一套文具,文具是由同一个系列的笔、墨、纸组成的,它们之间是相互关联的,中国的毛笔应该在宣纸上书写文字,中国的毛笔不能在英国的信纸上书写,因为信纸太薄了,这时候,就适合抽象工厂了

1. 笔工厂

public interface PenFactory {
    void createPen();
}

public class ChinesePen implements PenFactory {
    @Override
    public void createPen() {
        System.out.println("我是中国的毛笔");
    }
}

public class EnglishPen implements PenFactory {
    @Override
    public void createPen() {
        System.out.println("我是英国的鹅毛笔");
    }
}

2. 墨工厂

public interface InkFactory {
    void createInk();
}

public class ChineseInk implements InkFactory {
    @Override
    public void createInk() {
        System.out.println("中国墨水");
    }
}

public class EnglishInk implements InkFactory {
    @Override
    public void createInk() {
        System.out.println("英国墨水");
    }
}

3.文具工厂

/** * 一套文具 * * */
public interface StationeryFactory {
    void createInk();

    void createPen();
}

/** * 中式文具一套 * * */
public class ChineseStationeryFactory implements StationeryFactory {
    @Override
    public void createInk() {
        InkFactory chineseInk = new ChineseInk();
        chineseInk.createInk();
    }

    @Override
    public void createPen() {
        PenFactory chinesePen = new ChinesePen();
        chinesePen.createPen();
    }
}

/** * 得到一套英式风格的文具 * * */
public class EnglishStationeryFactory implements StationeryFactory {
    @Override
    public void createInk() {
        InkFactory englishInk = new EnglishInk();
        englishInk.createInk();

    }

    @Override
    public void createPen() {
        PenFactory englishPen = new EnglishPen();
        englishPen.createPen();
    }
}

4.测试

public class M {
    public static void main(String[] args) {
        /** * 得到一套中式文具 */
        StationeryFactory chineseStationery = new ChineseStationeryFactory();
        chineseStationery.createPen();
        chineseStationery.createInk();

        /** * 得到一套英式文具 */
        StationeryFactory englishStationery = new ChineseStationeryFactory();
        englishStationery.createPen();
        englishStationery.createInk();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值