java设计模式——工厂模式

一、抽象工厂模式

抽象工厂模式结构如下:
抽象工厂:提供了创建产品的接口,它包含多个创建产品的方法,可以
创建多个不同等级的产品。
具体工厂:主要是实现抽象工厂中的多个抽象方法,完成具体产品的创
建。
抽象产品:定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多
个抽象产品。
具体产品:实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系。

二、上代码

1、创建抽象工厂也就是工厂接口,工厂里面抽象的产品方法

public interface CoffeeFactory {

    Coffee createCoffee();
}

2、抽象产品类

public abstract class Coffee {

    public abstract String getName();

}

3、具体产品类

public class LatteCoffee extends Coffee {

    public String getName() {
        return "拿铁咖啡";
    }
}

4、具体工厂类,专门用来生产某一类产品

public class LatteCoffeeFactory implements CoffeeFactory {

    public Coffee createCoffee() {
        return new LatteCoffee();
    }
}

5、获取对象

public class Client {
    public static void main(String[] args) {
        CoffeeFactory factory = new LatteCoffeeFactory()
        System.out.println(coffee.getName());
    }
}

三、具体案例:jdk中Collection.iterator方法

1、抽象工厂

//Collectiony也就是上面所提的抽象工厂类
public interface Collection<E> extends Iterable<E> {
//Iterator 也就是抽象产品类
 Iterator<E> iterator();
}

2、抽象产品类

public interface Iterator<E> {}

3、具体工厂类
ArrayList实现了List 而List实现了Collection接口,也就是抽象工厂类

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
 public Iterator<E> iterator() {
        return new Itr();
    }
}

4、具体产品类

   private class Itr implements Iterator<E> {
           int cursor;       // index of next element to return
        int lastRet = -1; // index of last element returned; -1 if no such
        int expectedModCount = modCount;

        Itr() {}

        public boolean hasNext() {
            return cursor != size;
        }

        @SuppressWarnings("unchecked")
        public E next() {
            checkForComodification();
            int i = cursor;
            if (i >= size)
                throw new NoSuchElementException();
            Object[] elementData = ArrayList.this.elementData;
            if (i >= elementData.length)
                throw new ConcurrentModificationException();
            cursor = i + 1;
            return (E) elementData[lastRet = i];
        }}

5、获取对象

public class A {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        //获取Itr对象
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            String next = iterator.next();
            System.out.println(next);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值